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

Résolu
farcry165 Messages postés 12 Statut Membre -  
jisisv Messages postés 3678 Statut Modérateur -
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 11653 Statut Contributeur 1 847
 
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 12 Statut Membre
 
daccord, merci.
0
jisisv Messages postés 3678 Statut Modérateur 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