Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: find

From cppreference.net
std::basic_string
size_type find ( const basic_string & str, size_type pos = 0 ) const ;
(1) (noexcept depuis C++11)
(constexpr depuis C++20)
size_type find ( const CharT * s, size_type pos, size_type count ) const ;
(2) (constexpr depuis C++20)
size_type find ( const CharT * s, size_type pos = 0 ) const ;
(3) (constexpr depuis C++20)
size_type find ( CharT ch, size_type pos = 0 ) const ;
(4) (noexcept depuis C++11)
(constexpr depuis C++20)
template < class StringViewLike >

size_type find ( const StringViewLike & t,

size_type pos = 0 ) const noexcept ( /* voir ci-dessous */ ) ;
(5) (depuis C++17)
(constexpr depuis C++20)

Trouve la première sous-chaîne égale à la séquence de caractères donnée. La recherche commence à pos , c'est-à-dire que la sous-chaîne trouvée ne doit pas commencer à une position précédant pos .

1) Trouve la première sous-chaîne égale à str .
2) Trouve la première sous-chaîne égale à la plage [ s , s + count ) . Cette plage peut contenir des caractères nuls.
Si [ s , s + count ) n'est pas un intervalle valide , le comportement est indéfini.
3) Trouve la première sous-chaîne égale à la chaîne de caractères pointée par s . La longueur de la chaîne est déterminée par le premier caractère nul en utilisant Traits :: length ( s ) .
Si [ s , s + Traits :: length ( s ) ) n'est pas un intervalle valide , le comportement est indéfini.
4) Trouve le premier caractère ch (traité comme une sous-chaîne à un seul caractère selon les règles formelles ci-dessous).
5) Convertit implicitement t en une vue de chaîne sv comme si par std:: basic_string_view < CharT, Traits > sv = t ; , puis trouve la première sous-chaîne égale à sv .
Cette surcharge participe à la résolution de surcharge seulement si std:: is_convertible_v < const StringViewLike & ,
std:: basic_string_view < CharT, Traits >>
est true et std:: is_convertible_v < const StringViewLike & , const CharT * > est false .

Formellement, une sous-chaîne str est dite trouvée à la position xpos si toutes les conditions suivantes sont true :

  • xpos >= pos
  • xpos + str. size ( ) <= size ( )
  • pour toutes les positions n dans str , Traits :: eq ( at ( xpos + n ) , str. at ( n ) ) .

En particulier, cela implique que

  • une sous-chaîne peut être trouvée uniquement si pos <= size ( ) - str. size ( )
  • une sous-chaîne vide est trouvée à pos si et seulement si pos <= size ( )
  • pour une sous-chaîne non vide, si pos >= size ( ) , la fonction retourne toujours npos .

Table des matières

Paramètres

str - chaîne à rechercher
pos - position à laquelle commencer la recherche
count - longueur de la sous-chaîne à rechercher
s - pointeur vers une chaîne de caractères à rechercher
ch - caractère à rechercher
t - objet (convertible en std::basic_string_view ) à rechercher

Valeur de retour

Position du premier caractère de la sous-chaîne trouvée ou npos si aucune sous-chaîne de ce type n'est trouvée.

Exceptions

1,4) Ne lance rien.
5)
noexcept spécification :
noexcept ( std:: is_nothrow_convertible_v < const T & , std:: basic_string_view < CharT, Traits >> )

Si une exception est levée pour quelque raison que ce soit, cette fonction n'a aucun effet ( strong exception safety guarantee ).

Exemple

#include <iomanip>
#include <iostream>
#include <string>
void print(int id, std::string::size_type n, std::string const& s)
{
    std::cout << id << ") ";
    if (std::string::npos == n)
        std::cout << "not found! n == npos\n";
    else
        std::cout << "found @ n = " << n << ", substr(" << n << ") = "
                  << std::quoted(s.substr(n)) << '\n';
}
int main()
{
    std::string::size_type n;
    std::string const s = "This is a string"; /*
                             ^  ^  ^
                             1  2  3          */
    // recherche depuis le début de la chaîne
    n = s.find("is");
    print(1, n, s);
    // recherche à partir de la position 5
    n = s.find("is", 5);
    print(2, n, s);
    // recherche d'un caractère unique
    n = s.find('a');
    print(3, n, s);
    // recherche d'un caractère unique
    n = s.find('q');
    print(4, n, s);
}

Sortie :

1) found @ n = 2, substr(2) = "is is a string"
2) found @ n = 5, substr(5) = "is a string"
3) found @ n = 8, substr(8) = "a string"
4) not found! n == npos

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 847 C++98 il n'y avait aucune garantie de sécurité d'exception garantie de sécurité d'exception forte ajoutée
LWG 2064 C++11 les surcharges (3,4) étaient noexcept supprimées
LWG 2946 C++17 la surcharge (5) causait une ambiguïté dans certains cas évitée en la rendant template
P1148R0 C++11
C++17
noexcept pour les surcharges (4,5) a été
accidentellement supprimé par LWG2064/LWG2946
restauré

Voir aussi

trouve la première occurrence d'une sous-chaîne de caractères
(fonction)
trouve la première occurrence d'une chaîne large dans une autre chaîne large
(fonction)
trouve la première occurrence d'un caractère
(fonction)
trouve la première occurrence d'un caractère large dans une chaîne large
(fonction)
trouve la dernière occurrence d'une sous-chaîne
(fonction membre publique)
trouve la première occurrence de caractères
(fonction membre publique)
trouve la première absence de caractères
(fonction membre publique)
trouve la dernière occurrence de caractères
(fonction membre publique)
trouve la dernière absence de caractères
(fonction membre publique)
trouve des caractères dans la vue
(fonction membre publique de std::basic_string_view<CharT,Traits> )
recherche la première occurrence d'une plage d'éléments
(fonction template)