std::basic_string::find(3)
π NAME π
std::basic_string::find β std::basic_string::find. that's the name, no notes π
. this page lives in the C++ Standard Libary manual (yes, that spelling is right there in the header, we are not fixing it, periodt).
πΈ Synopsis πΈ
(1)
size_type find( const basic_string& str, size_type pos = 0 ) const;
noexcept since C++11 Β· constexpr since C++20
(2)
size_type find( const CharT* s, size_type pos, size_type count ) const;
constexpr since C++20
(3)
size_type find( const CharT* s, size_type pos = 0 ) const;
constexpr since C++20
(4)
size_type find( CharT ch, size_type pos = 0 ) const;
noexcept since C++11 Β· constexpr since C++20
(5)
template< class StringViewLike >
size_type find( const StringViewLike& t,
size_type pos = 0 ) const noexcept(/* see below */);
since C++17 Β· constexpr since C++20
okay so the whole vibe: finds the first substring equal to the given character sequence. search begins at pos, i.e. the found substring must not begin in a position preceding pos. got it? iconic. π
- finds the first substring equal to
str. - finds the first substring equal to the range
[s, s + count). this range may contain null characters. if[s, s + count)is not a valid range, the behavior is undefined. π - finds the first substring equal to the 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
ch(treated as a single-character substring by the formal rules below). - implicitly converts
tto a string viewsvas if bystd::basic_string_view<CharT, Traits> sv = t;, then finds the first substring equal tosv. this overload participates in overload resolution only ifstd::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>is true andstd::is_convertible_v<const StringViewLike&, const CharT*>is false.
formally, a substring str is said to be found at position xpos if all of the following are true:
xpos >= posxpos + str.size() <= size()- for all positions
nin str,Traits::eq(at(xpos + n), str.at(n)).
in particular, this implies that:
- a substring can be found only if
pos <= size() - str.size() - an empty substring is found at
posif and only ifpos <= size() - for a non-empty substring, if
pos >= size(), the function always returnsnpos.
π Parameters π
strβ string to search forposβ position at which to start the searchcountβ length of substring to search forsβ pointer to a character string to search forchβ character to search fortβ object (convertible tostd::basic_string_view) to search for
π Return value π
position of the first character of the found substring or npos if no such substring is found. simple as that, bestie β¨
π₯ Exceptions π₯
1,4)β throws nothing.5)β noexcept specification:
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). π«Ά
π Example π
// Run this code
#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 */
// search from beginning of string
n = s.find("is");
print(1, n, s);
// search from position 5
n = s.find("is", 5);
print(2, n, s);
// find a single character
n = s.find('a');
print(3, n, s);
// find a single character
n = s.find('q');
print(4, n, s);
}
β¨ Output β¨
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
π¦ Defect reports π¦
the following behavior-changing defect reports were applied retroactively to previously published C++ standards. history class but make it C++ π
- LWG 847 β applied to C++98: there was no exception safety guarantee β added strong exception safety guarantee
- LWG 2064 β applied to C++11: overloads
(3,4)werenoexceptβ removed - LWG 2946 β applied to C++17: overload
(5)caused ambiguity in some cases β avoided by making it a template - P1148R0 β applied to C++11, C++17:
noexceptfor overloads(4,5)were accidently dropped by LWG2064/LWG2946 β restored
π§ See also π§
strstrβ finds the first occurrence of a substring of characters (function)wcsstrβ finds the first occurrence of a wide string within another wide string (function)strchrβ finds the first occurrence of a character (function)wcschrβ finds the first occurrence of a wide character in a wide string (function)rfindβ find the last occurrence of a substring (public member function)find_first_ofβ find first occurrence of characters (public member function)find_first_not_ofβ find first absence 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β find characters in the view (public member function ofstd::basic_string_view<CharT,Traits>)searchβ searches for a range of elements (function template)
π Category π
- conditionally noexcept
okay that's the whole page, bestie π. this came from http://cppreference.com, version 2024.06.10 β go find your substrings and slay β¨π
π¦ 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