Namespaces
Variants

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

From 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 ( /* ver más abajo */ ) ;
(5) (desde C++17)
(constexpr desde C++20)

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

1) Encuentra el primer carácter que no sea igual a ninguno de los caracteres en str .
2) Encuentra el primer carácter que no sea igual a ninguno de los caracteres en el rango [ s , s + count ) . Este rango puede incluir caracteres nulos.
Si [ s , s + count ) no es un rango válido , el comportamiento es indefinido.
3) Encuentra el primer carácter que no sea igual a ninguno de los caracteres en 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 es indefinido.
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 mediante std:: basic_string_view < CharT, Traits > sv = t ; , luego encuentra el primer carácter que no sea igual a ninguno de los caracteres 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 .

Contenidos

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> )