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

Résolu/Fermé
farcry165 Messages postés 11 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 2 décembre 2012 - 5 août 2012 à 20:19
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 5 août 2012 à 21:43
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
5 août 2012 à 20:47
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 dimanche 18 janvier 2009 Statut Membre Dernière intervention 2 décembre 2012
5 août 2012 à 21:06
daccord, merci.
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
5 août 2012 à 21:43
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