Pb : string::find(string, debut, longueur) find pas :o [Résolu]

Signaler
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
-
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
-
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

Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

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 ::.)~
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
6
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.
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
oubliez pas l'appel du constructeur

string str( "Bonjour, es c'est moi NitRic!");
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

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 ::.)~
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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)
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

Possible mais je ne vois aucun appel à un constructeur de recopie et d'objet temporaire ...

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

~(.:: NitRic ::.)~
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
a ouai okstring str "hello";> appel du constructeur...
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
6
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.
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

http://www.cppreference.com
à droite: C++ Strings

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

~(.:: NitRic ::.)~