std::basic_...irst_not_of(3)
β¨ NAME β¨
std::basic_string::find_first_not_of β the member function of std::basic_string that finds the first character equal to none of the characters in a given character sequence. Bestie, this is the one from the C++ Standard Library and she is lowkey iconic for pattern-matching.
πΈ SYNOPSIS πΈ
size_type find_first_not_of( const basic_string& str, (1)
(noexcept since C++11)
size_type pos = 0 ) const;
(constexpr since C++20)
size_type find_first_not_of( const CharT* s,
size_type pos, size_type (2)
(constexpr since C++20)
count ) const;
size_type find_first_not_of( const CharT* s, (3)
(constexpr since C++20)
size_type pos = 0 ) const;
size_type find_first_not_of( CharT ch, size_type pos = 0 (4)
(noexcept since C++11)
) const;
(constexpr since C++20)
template< class StringViewLike >
size_type (since
C++17)
find_first_not_of( const StringViewLike& t, (5)
(constexpr since C++20)
size_type pos = 0 ) const
noexcept(/* see below */);
Finds the first character equal to none of the characters in the given character sequence. The search considers only the range [pos, size()). If all characters in the range can be found in the given character sequence, npos will be returned.
- Finds the first character equal to none of characters in
str. - Finds the first character equal to none of characters in range
[s, s + count). This range can include null characters. If[s, s + count)is not a valid range, the behavior is undefined. - Finds the first character equal to none of characters in character string pointed to by
s. The length of the string is determined by the first null character usingTraits::length(s). If[s, s + Traits::length(s))is not a valid range, the behavior is undefined. - Finds the first character not equal to
ch. - Implicitly converts
tto a string viewsvas if bystd::basic_string_view<CharT, Traits> sv = t;, then finds the first character equal to none of characters insv. This overload participates in overload resolution only ifstd::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>istrueandstd::is_convertible_v<const StringViewLike&, const CharT*>isfalse.
In all cases, equality is checked by calling Traits::eq.
π PARAMETERS π
strβ string identifying characters to search forposβ position for the search to start fromcountβ length of character string identifying characters to search forsβ pointer to a character string identifying characters to search forchβ character identifying characters to search fortβ object (convertible tostd::basic_string_view) identifying characters to search for
π RETURN VALUE π
Position of the found character, or std::string::npos if no such character is found. Periodt.
π¦ EXCEPTIONS π¦
1,4) Throws nothing. Literally nothing. The calmest overloads in the game.
noexceptspecification:
noexcept(std::is_nothrow_convertible_v<const T&, std::basic_string_view<CharT, Traits>>)
If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee). So even if things go off the rails, your string stays unbothered. π
β EXAMPLE β
// Run this code
#include <iostream>
#include <string>
int main()
{
// Permit uppercase letters, lowercase letters and numbers in macro names
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();
// Now first at '%' and last is one past end of the found substring
data.replace(first, last - first, replacement);
}
std::cout << "After: " << data << '\n';
}
Output:
Before: 1) %FIX, 2) %HACK, and 3) %TODO
After: 1) %DONE%, 2) %DONE%, and 3) %DONE%
π DEFECT REPORTS π
The following behavior-changing defect reports were applied retroactively to previously published C++ standards. The way the committee keeps tweaking these overloads... we love an evolving icon. π«Ά
LWG 847β Applied to: C++98 β Behavior as published: there was no exception safety guarantee β Correct behavior: added strong exception safety guaranteeLWG 2064β Applied to: C++11 β Behavior as published: overloads (3,4) werenoexceptβ Correct behavior: removedLWG 2946β Applied to: C++17 β Behavior as published: overload (5) caused ambiguity in some cases β Correct behavior: avoided by making it a templateP1148R0β Applied to: C++11 and C++17 β Behavior as published:noexceptfor overloads (4,5) were accidentally dropped byLWG2064/LWG2946β Correct behavior: restored
π SEE ALSO π
findβ finds the first occurrence of the given substring (public member function)rfindβ find the last occurrence of a substring (public member function)find_first_ofβ find first occurrence of characters (public member function)find_last_ofβ find last occurrence of characters (public member function)find_last_not_ofβ find last absence of characters (public member function)find_first_not_ofβ find first absence of characters (public member functionofstd::basic_string_view<CharT,Traits>)
π CATEGORY π
- conditionally
noexcept
Source: cppreference.com Β· Version: 2024.06.10
That's the whole vibe, bestie β go forth and find_first_not_of with confidence. πβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms