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 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.

3 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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
  2. farcry165 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
     
    daccord, merci.
    0
  3. jisisv Messages postés 3678 Statut Modérateur 936
     
    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