Namespaces
Variants

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

De es.cppreference.net
 
 
 
std::basic_string
 
size_type find_first_not_of( const basic_string& str,
                             size_type pos = 0 ) const;
(1) (noexcept desde C++11)
(constexpr desde C++20)
size_type find_first_not_of( const CharT* s,
                             size_type pos, size_type count ) const;
(2) (constexpr desde C++20)
size_type find_first_not_of( const CharT* s,
                             size_type pos = 0 ) const;
(3) (constexpr desde C++20)
size_type find_first_not_of( CharT ch, size_type pos = 0 ) const;
(4) (noexcept desde C++11)
(constexpr desde C++20)
template< class StringViewLike >
size_type
    find_first_not_of( const StringViewLike& t,
                       size_type pos = 0 ) const noexcept(/* see below */);
(5) (desde C++17)
(constexpr desde C++20)

Encuentra el primer carácter que no es igual a ninguno de los caracteres de la secuencia de caracteres dada. La búsqueda considera solo el rango [pos, size()). Si todos los caracteres en el rango pueden ser encontrados en la secuencia de caracteres dada, se devolverá npos.

1) Encuentra el primer carácter que no es igual a ningún carácter de str.
2) Encuentra el primer carácter que no es igual a ningún carácter del rango [s, s + count). Este rango puede incluir caracteres nulos.
Si [s, s + count) no es un rango válido, el comportamiento no está definido.
3) Encuentra el primer carácter que no es igual a ningún carácter de la cadena de caracteres apuntada por s. La longitud de la cadena se determina por el primer carácter nulo usando Traits::length(s).
Si [s, s + Traits::length(s)) no es un rango válido, el comportamiento no está definido.
4) Encuentra el primer carácter que no es igual a ch.
5) Convierte implícitamente t a una vista de cadena sv como si fuera por std::basic_string_view<CharT, Traits> sv = t;, luego encuentra el primer carácter que no es igual a ningún carácter en sv.
Esta sobrecarga participa en la resolución de sobrecarga solo si std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>>
es true y std::is_convertible_v<const StringViewLike&, const CharT*> es false.

En todos los casos, la igualdad se verifica llamando a Traits::eq.

Parámetros

str - cadena que identifica los caracteres a buscar
pos - posición desde la cual iniciar la búsqueda
count - longitud de la cadena de caracteres que identifica los caracteres a buscar
s - puntero a una cadena de caracteres que identifica los caracteres a buscar
ch - carácter que identifica los caracteres a buscar
t - objeto (convertible a std::basic_string_view ) que identifica los caracteres a buscar

Valor de retorno

Posición del carácter encontrado o std::string::npos si no se encuentra dicho carácter.

Excepciones

1,4) No lanza nada.
5)
noexcept especificación:
noexcept ( std:: is_nothrow_convertible_v < const T & , std:: basic_string_view < CharT, Traits >> )

Si se lanza una excepción por cualquier razón, esta función no tiene efecto ( strong exception safety guarantee ).

Ejemplo

#include <iostream>
#include <string>
int main()
{
    // Permitir letras mayúsculas, minúsculas y números en nombres de macros
    const char* pattern = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                          "abcdefghijklmnopqrstuvwxyz"
                          "0123456789";
    std::string data = "1) %FIX, 2) %HACK, and 3) %TODO";
    const std::string replacement = "%DONE%";
    std::cout << "Before: " << data << '\n';
    for (std::string::size_type first{}, last{};
        (first = data.find('%', first)) != std::string::npos;
        first += replacement.size())
    {
        last = data.find_first_not_of(pattern, first + 1);
        if (last == std::string::npos)
            last = data.length();
        // Ahora first está en '%' y last está una posición después del final de la subcadena encontrada
        data.replace(first, last - first, replacement);
    }
    std::cout << "After: " << data << '\n';
}

Salida:

Before: 1) %FIX, 2) %HACK, and 3) %TODO
After: 1) %DONE%, 2) %DONE%, and 3) %DONE%

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 847 C++98 no existía garantía de seguridad de excepciones se añadió garantía de seguridad de excepciones fuerte
LWG 2064 C++11 las sobrecargas (3,4) eran noexcept eliminadas
LWG 2946 C++17 la sobrecarga (5) causaba ambigüedad en algunos casos evitada al convertirla en plantilla
P1148R0 C++11
C++17
noexcept para las sobrecargas (4,5) fue
eliminado accidentalmente por LWG2064/LWG2946
restaurado

Véase también

encuentra la primera ocurrencia de la subcadena dada
(función miembro pública)
encuentra la última ocurrencia de una subcadena
(función miembro pública)
encuentra la primera ocurrencia de caracteres
(función miembro pública)
encuentra la última ocurrencia de caracteres
(función miembro pública)
encuentra la última ausencia de caracteres
(función miembro pública)
encuentra la primera ausencia de caracteres
(función miembro pública de std::basic_string_view<CharT,Traits> )