home | help
std::basic_...irst_not_of(3)   C++ Standard Libary  std::basic_...irst_not_of(3)

NAME
     std::basic_string::find_first_not_of - std::basic_string::find_first_not_of

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 re-
     turned.

	1) Finds the first character equal to none of characters in str.
	2)  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.
	3) 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 char-
     acter using
	Traits::length(s).
	If [s, s + Traits::length(s)) is not a valid range, the behavior is  un-
     defined.
	4) Finds the first character not equal to ch.
	5)  Implicitly	converts  t  to  a  string  view  sv  as  if by std::ba-
     sic_string_view<CharT,
	Traits> sv = t;, then finds the first character equal to none of charac-
     ters in sv.
	This overload participates in overload resolution only if
	std::is_convertible_v<const StringViewLike&,
			      std::basic_string_view<CharT, Traits>> is true and
	std::is_convertible_v<const StringViewLike&, const CharT*> is false.

	In all cases, equality is checked by calling Traits::eq.

Parameters
	str   - string identifying characters to search for
	pos   - position for the search to start from
	count - length of character string identifying characters to search for
	s     - pointer to a character string identifying characters  to  search
     for
	ch    - character identifying characters to search for
	t     - object (convertible to std::basic_string_view) identifying char-
     acters to
		search for

Return value
	Position  of the found character or std::string::npos if no such charac-
     ter is found.

Exceptions
	1,4) Throws nothing.
	5)
	noexcept specification:
	noexcept(std::is_nothrow_convertible_v<const	    T&, 	std::ba-
     sic_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 <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 sub-
     string
	      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	retroac-
     tively to
	previously published C++ standards.

	   DR	 Applied to	      Behavior as published		 Correct
     behavior
	LWG  847   C++98       there  was  no exception safety guarantee   added
     strong exception
								      safety
     guarantee
	LWG 2064 C++11	    overloads (3,4) were noexcept	      removed
	LWG 2946 C++17	    overload (5) caused ambiguity in some     avoided by
     making it a
			    cases				      template
	P1148R0  C++11	    noexcept for overloads (4,5) were	      restored
		 C++17	    accidentally dropped by LWG2064/LWG2946

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 absence of characters
	find_first_not_of    (public	 member     function	 of	std::ba-
     sic_string_view<CharT,Traits>)

Category:
	  * conditionally noexcept

http://cppreference.com 	   2024.06.10	    std::basic_...irst_not_of(3)

home | help