For(size_t i=s.size(); i>=0) ne s'arrête pas

Résolu
farcry165 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, j'ai un problème dans cette partie de programme qui doit normalement faire une liste de l'emplacement des parenthèses (je l'ai volontairement allégé pour ne laisser que la partie qui bug) bug car ou j'utilise la comparaison i>0 et elle ne prend pas en compte le premier caractère de la chaine s_calcule[0] ou alors j'utilise la comparaison i>=0 et la fonction tourne en boucle ce qui a pour conséquence de planter le programme.

#include <iostream>
#include <string>
using namespace std;

int main ()
{
	string s_calcule("(2+2)+2*22-(22²)+2/89");
	size_t debut=0; 

	for(size_t i=s_calcule.size(); i>0; i--)
       {		
		if(s_calcule.c_str()[i]=='(')
               {
	          cout<<"parenthèse est a i="<<debut<<endl;
                  debut=i;			
               } 
      }
  
  system("PAUSE");
  return 0;
}


Merci d'avance pour votre aide.

A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

for(size_t i=s_calcule.size(); i>0; i--)
Trois erreurs :
1/ Mets plutôt int ou unsigned int ou des shorts mais pas de size_t qu'on réserve plutôt pour une taille pas pour une variable. Sinon, Tu vas avoir un gros problème pour i=0.
2/ La dernière position est : s_calcule.size()-1
3/ La première est i=0; Donc i>=0;
0
farcry165 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
daccord, merci.
0
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Et remplace size_t i=s_calcule.size(); par une comparaison avec une variable initialisée à la longueur de ta chaîne.
Autrement dit, calcule une fois pour toute la longueur de ta chaîne , qui n'est pas sensée varier dans le contexte de ton programme, dans une variable
Il faudrait évidemment examiner comment le préprocesseur de ton environnement traduit ces appels (fonction, macro..)
0