Que signifie la phrase std::string::npos
dans le morceau de code suivant ?
found = str.find(str2);
if (found != std::string::npos)
std::cout << "première occurrence de 'needle' trouvée à : " << int(found) << std::endl;
Que signifie la phrase std::string::npos
dans le morceau de code suivant ?
found = str.find(str2);
if (found != std::string::npos)
std::cout << "première occurrence de 'needle' trouvée à : " << int(found) << std::endl;
Comparer == -1 pourrait aussi faire penser à certains qu'ils peuvent le convertir en < 0, ce qui N'EST PAS la même chose et ne fonctionnera pas.
Juste demander si quelqu'un a rencontré ceci, ou si c'est juste moi... Je cours cout<<"pos: "< et obtiens `pos:4294967295 npos: 4294967295` quand je l'exécute sous Windows mais sur Mac j'obtiens `pos:4294967295 npos: 18446744073709551615`. Ça ne semble pas correct... eh bien de toute façon je suggère de comparer à `-1` plutôt qu'à `std::string::npos`
@user1135469 si vous voyez la réponse de codaddict ci-dessous (stackoverflow.com/a/3827997/752842) ou de Sebastian Raschka, je pense que ce que vous obtenez aura du sens. Et je recommanderais d'utiliser npos, car j'ai essayé d'utiliser -1 et cela ne fonctionnait pas correctement dans les conditions que j'utilisais.
+1 pour avoir effectivement montré la dérivation npos = no-pos qui rend facile à mémoriser. C'est tellement évident qu'on n'y penserait pas une fois qu'on le sait, mais pour quelqu'un voyant ces lettres pour la première fois, ça peut ne pas cliquer...?
Le document pour string::npos
dit :
npos est une valeur constante membre statique avec la plus grande valeur possible pour un élément de type size_t.
En tant que valeur de retour, elle est généralement utilisée pour indiquer un échec.
Cette constante est en fait définie avec une valeur de -1 (pour tout trait), ce qui, car size_t est un type intégral non signé, devient la plus grande valeur représentable possible pour ce type.
std::string::npos
est un index défini par l'implémentation qui est toujours en dehors des limites de n'importe quelle instance de std::string
. Diverses fonctions de std::string
le renvoient ou l'acceptent pour signaler une situation au-delà de la fin de la chaîne. Il est généralement d'un certain type entier non signé et sa valeur est généralement std::numeric_limits::max ()
qui est (grâce aux promotions standard des entiers) généralement comparable à -1
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.