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

NAME
     std::basic_string::find_last_not_of - std::basic_string::find_last_not_of

Synopsis
	size_type  find_last_not_of(  const basic_string& str,	       (noexcept
     since C++11)
				    size_type pos = npos )	 (1)  (constexpr
     since C++20)
	const;
	size_type find_last_not_of( const CharT* s,
				    size_type  pos, size_type	  (2) (constexpr
     since C++20)
	count ) const;
	size_type find_last_not_of( const CharT* s, size_type	 (3)  (constexpr
     since C++20)
	pos = npos ) const;
	size_type  find_last_not_of(  CharT ch, size_type pos =    (4) (noexcept
     since C++11)
	npos ) const;						      (constexpr
     since C++20)
	template< class StringViewLike >

	size_type							  (since
     C++17)
	    find_last_not_of( const StringViewLike& t,		 (5)  (constexpr
     since C++20)

			      size_type pos = npos ) const
	noexcept(/* see below */);

	Finds  the  last  character equal to none of the characters in the given
     character
	sequence. The search considers only the range [0, pos]. If  all  charac-
     ters in the
	range  can  be	found  in the given character sequence, npos will be re-
     turned.

	1) Finds the last character equal to none of characters in str.
	2) Finds the last character equal to none of characters in the 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 last 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 last 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 last 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 at which to end search
	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 npos if no such character is found.

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 <iostream>
      #include <string>

      void show_pos(const std::string& str, std::string::size_type found)
      {
	  if (found != std::string::npos)
	      std::cout << '[' << found << "] = \'" << str[found] << "\'\n";
	  else
	      std::cout << "not found\n";
      }

      int main()
      {
	  std::string str{"abc_123"};
	  char const* skip_set{"0123456789"};
	  std::string::size_type str_last_pos{std::string::npos};

	  show_pos(str, str.find_last_not_of(skip_set)); // [3] = '_'

	  str_last_pos = 2;
	  show_pos(str,  str.find_last_not_of(skip_set, str_last_pos)); // [2] =
     'c'

	  str_last_pos = 2;
	  show_pos(str, str.find_last_not_of('c', str_last_pos)); // [1] = 'b'

	  const char arr[]{'3', '4', '5'};
	  show_pos(str, str.find_last_not_of(arr)); // [5] = '2'

	  str_last_pos = 2;
	  std::string::size_type skip_set_size{4};
	  show_pos(str, str.find_last_not_of(skip_set,
					     str_last_pos,
					     skip_set_size)); // [2] = 'c'

	  show_pos(str, str.find_last_not_of("abc")); // [6] = '3'

	  str_last_pos = 2;
	  show_pos(str, str.find_last_not_of("abc", str_last_pos)); // not found
      }

Output:
      [3] = '_'
      [2] = 'c'
      [1] = 'b'
      [5] = '2'
      [2] = 'c'
      [6] = '3'
      not found

	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 141  C++98	    overload (1) could	only  return  npos   the  search
     range is
			    if	pos >= size()			  [0, size()) in
     this case
	LWG 847  C++98	    there was no exception  safety	   added  strong
     exception
			    guarantee				  safety guaran-
     tee
	LWG 2064 C++11	    overloads (3,4) were noexcept	 removed
	LWG 2946 C++17	    overload (5) caused ambiguity in	 avoided by mak-
     ing it a
			    some cases				 template
		 C++11	    noexcept for overloads (4,5) were
	P1148R0  C++17	    accidentally dropped by		 restored
			    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_first_not_of find first absence of characters
			  (public member function)
	find_last_of	  find last occurrence of characters
			  (public member function)
			  find last absence of characters
	find_last_not_of     (public	 member     function	 of	std::ba-
     sic_string_view<CharT,Traits>)

Category:
	  * conditionally noexcept

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

home | help