Pb : string::find(string, debut, longueur) find pas :o

Résolu
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 9 sept. 2004 à 05:19
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 9 sept. 2004 à 17:24
le titre en dit deja long:
quand je met la fonction sans le parametre "longueur", la fonction trouve bien, mais des ke je rajoute ce dernier parametre, la valeur n'est pas trouvee, meme si je met la longueur de la chaine !!!

string Texte = "a x=1";

cout << Texte.find(" ", 0) << endl; // affiche 2
cout << Texte.find(" ", 0, 5) << endl; // affiche 4294967295 !!!

Je n'y comprend rien. c'est du chnois pour moi (je savais que jaurai pas du acheter du matos chinois :-p )

merci a celui ki sara me dire pourquoi !

9 réponses

NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
9 sept. 2004 à 07:14
Je n'utilise pas les basic_string donc je ne l'ai connais pas beaucoup mais je viens tout juste de tester et d'après ce que j'ai pus remarquer, `longueur` représente la longueur de la chaine recherché, ex:

string str = "Bonjour, es c'est moi NitRic!";
cout << str.find("est ", 0, 2) << endl;

affiche 9

----------------------------------------------------

string str = "Bonjour, es c'est moi NitRic!";
cout << str.find("est ", 0, 3) << endl;

affiche 14

Donc en gros, si tu as une chaine comme par exemple "NitRic c'est moi" et que tu souhaite recherche _que_ le mot `NitRic` dans une autre, tu devras faire par exemple:

string str1 = "NitRic c'est moi";
string str2 = "Bonjour, c'est moi NitRic!";

cout << str2.find( str1.c_str(), 0, 6 ); /* 6 représentant les 6 premiers caractères de la chaine str1, ceux à rechercher */

ce qui affichera 19

Voilà, c'est tout ...

~(.:: NitRic ::.)~
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
9 sept. 2004 à 17:24
merci. pas mal le lien :)
pour ceux que ca interesse, la solution c dutiliser :

size_type find_first_of( const char *str, size_type index, size_type num );

pour rechercher la premier occurence d'un des carracteres de str a partir de lindex et sur une longueur de num caracteres.
3
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
9 sept. 2004 à 10:38
oubliez pas l'appel du constructeur

string str( "Bonjour, es c'est moi NitRic!");
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
9 sept. 2004 à 10:46
string str = "hello"; == string str("hello");

ce n'est pas l'opérateur = qui est appelé mais le constructeur basic_string( const _E * _S, ... ){...}

Dans les deux cas.

~(.:: NitRic ::.)~
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
9 sept. 2004 à 10:54
string str("hello"); => constructeur const charT*
string str "hello";> constructeur const charT* puis constructeur par copie sur l'objet temporairement créé (ce qui est inutile)
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
9 sept. 2004 à 11:11
Possible mais je ne vois aucun appel à un constructeur de recopie et d'objet temporaire ...

End debug(F11) et dans le source assembleur ...

~(.:: NitRic ::.)~
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
9 sept. 2004 à 11:19
a ouai okstring str "hello";> appel du constructeur...
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
9 sept. 2004 à 16:58
ok merci c'est es clair et en + les explications vont bien plus loin que ske jattendai :) .
La prochaine fois je lirai + attentivement la doc :blush)

Donc eske vous savez si il est possible de rechercher une occurence entre 2 bornes? Paske sinon si je recherche une occurence et qu'elle n'apparait que bien apres la zone ou je recherche, ca va prendre du temps pour rien.
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
9 sept. 2004 à 17:04
http://www.cppreference.com
à droite: C++ Strings

find()
find_first_of()
find_last_of()
...

~(.:: NitRic ::.)~
0
Rejoignez-nous