[C++] string.append(1, *iter); ne marche pas...

string.append(1, *iter); ne marche pas... [C++] - C++ - Programmation

Marsh Posté le 25-02-2004 à 07:44:16    

Salut,
je voudrais savoir pourquoi la boucle avec l'itérateur ne marche pas (compile mais plante), alors que la boucle avec un for plus classique fonctionne bien...
 

Code :
  1. Constructeur(string sIp)
  2.     {
  3.         string::iterator iter;
  4.         string parts[4];
  5.         int n = 0;
  6.        
  7.         for(sIp.begin() ; iter!=sIp.end() ; iter++)
  8.         {
  9.             if(*iter == '.')
  10.                 n++;
  11.             else
  12.                 parts[n].append(1, *iter); //compile mais plante
  13.         }
  14. //-------------------------------------------
  15.         for(int i=0;i<sIp.length();i++)
  16.         {
  17.             if(sIp[i] == '.')
  18.                 n++;
  19.             else
  20.                 parts[n].append(1, sIp[i]); //c'est bon, ça marche
  21.         }
  22.         cout << parts[0] << "\n";
  23.         cout << parts[1] << "\n";
  24.         cout << parts[2] << "\n";
  25.         cout << parts[3] << "\n";
  26.     }


 
merci
   ANT

Reply

Marsh Posté le 25-02-2004 à 07:44:16   

Reply

Marsh Posté le 25-02-2004 à 07:59:39    

juste une question naïve, il est initialisé où ton "iter" (tu itère sur quelle chaine) ? je vois pas.
 
Tu es sur de ne pas avoir ne serais-ce que des warnings (au hasard, un warning parlant de variable non initialisée, à la ligne où ça plante) à la compilation ? que C++ compile des conneries sans broncher, je suis d'accord, mais il ne faut pas exagérer non plus, il faut mettre un peu de templates pour faire ça discrètement.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 25-02-2004 à 08:02:51    

j'itère sur le paramètre du contructeur, la string sIp, et non rien , pas de warnings

Reply

Marsh Posté le 25-02-2004 à 08:03:24    

arg ouais j'ai vu !!!
ben oui tu as raison je vais essayer ça,  pff mais quel boulet :)
 
en passant, laquelles des 2 boucles est préférable ?


Message édité par antsite le 25-02-2004 à 08:04:33
Reply

Marsh Posté le 25-02-2004 à 08:11:23    

à titre perso, je suis assez pour les itérateurs. Mais quand on fait un parser haute perf, c'est le profiler qui décide.
 
Par contre, je comprends pas bien ce que tu fais.
 
tu parses les chaines de la forme "acd.efg.hij.klm.nop.qrs.tuv" ?
pour en sortir {"e", "h", "k", "n", "q", "t"}, en explosant éventuellement la taille du tableau ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 25-02-2004 à 10:25:56    

Pour les parser en C++, y a Spirit de boost.org

Reply

Marsh Posté le 25-02-2004 à 15:54:36    

non je parse juste une IP :)

Reply

Marsh Posté le 25-02-2004 à 16:45:29    

strstream est ton ami alors

Reply

Marsh Posté le 25-02-2004 à 16:57:28    

Joel F a écrit :

strstream est ton ami alors

TCPL3rd est ton ami :o
stringstream :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed