Namespaces
Variants

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

Материал из ru.cppreference.net
 
 
 
std::basic_string
 
size_type find_last_of( const basic_string& str,
                        size_type pos = npos ) const;
(1) (noexcept начиная с C++11)
(constexpr начиная с C++20)
size_type find_last_of( const CharT* s,
                        size_type pos, size_type count ) const;
(2) (constexpr начиная с C++20)
size_type find_last_of( const CharT* s, size_type pos = npos ) const;
(3) (constexpr начиная с C++20)
size_type find_last_of( CharT ch, size_type pos = npos ) const;
(4) (noexcept начиная с C++11)
(constexpr начиная с C++20)
template< class StringViewLike >
size_type
    find_last_of( const StringViewLike& t,
                  size_type pos = npos ) const noexcept(/* see below */);
(5) (начиная с C++17)
(constexpr начиная с C++20)

Находит последний символ, равный одному из символов в заданной последовательности. Точный алгоритм поиска не специфицирован. Поиск рассматривает только диапазон [0, pos]. Если ни один из символов заданной последовательности не присутствует в диапазоне, возвращается npos.

1) Находит последний символ, равный одному из символов в str.
2) Находит последний символ, равный одному из символов в диапазоне [s, s + count). Этот диапазон может содержать нулевые символы.
Если [s, s + count) не является корректным диапазоном, поведение не определено.
3) Находит последний символ, равный одному из символов в строке, на которую указывает s. Длина строки определяется первым нулевым символом с помощью Traits::length(s).
Если [s, s + Traits::length(s)) не является корректным диапазоном, поведение не определено.
4) Находит последний символ, равный ch.
5) Неявно преобразует t в строковое представление sv как если бы с помощью std::basic_string_view<CharT, Traits> sv = t;, затем находит последний символ, равный одному из символов в sv.
Эта перегрузка участвует в разрешении перегрузки только если std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>>
является true и std::is_convertible_v<const StringViewLike&, const CharT*> является false.

Во всех случаях равенство проверяется вызовом Traits::eq.

Параметры

str - строка, определяющая символы для поиска
pos - позиция, на которой должен завершиться поиск
count - длина строки символов, определяющей символы для поиска
s - указатель на строку символов, определяющую символы для поиска
ch - символ для поиска
t - объект (преобразуемый в std::basic_string_view ), определяющий символы для поиска

Возвращаемое значение

Позиция найденного символа или npos если такой символ не найден.

Исключения

1,4) Ничего не выбрасывает.
5)
noexcept спецификация:
noexcept ( std:: is_nothrow_convertible_v < const T & , std:: basic_string_view < CharT, Traits >> )

Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта ( гарантия строгой безопасности исключений ).

Пример

#include <iostream>
#include <string>
int main()
{
    const std::string path = "/root/config";
    auto const pos = path.find_last_of('/');
    const auto leaf = path.substr(pos + 1);
    std::cout << leaf << '\n';
}

Вывод:

config

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 141 C++98 перегрузка (1) могла возвращать только npos если pos >= size ( ) диапазон поиска составляет
[ ​ 0 ​ , size ( ) ) в этом случае
LWG 847 C++98 не было гарантии безопасности исключений добавлена строгая гарантия безопасности исключений
LWG 2064 C++11 перегрузки (3,4) были noexcept удалено
LWG 2946 C++17 перегрузка (5) вызывала неоднозначность в некоторых случаях устранено путем превращения в шаблон
P1148R0 C++11
C++17
noexcept для перегрузок (4,5) были
случайно удалены LWG2064/LWG2946
восстановлено

Смотрите также

находит первое вхождение заданной подстроки
(public member function)
находит последнее вхождение подстроки
(public member function)
находит первое вхождение символов
(public member function)
находит первое отсутствие символов
(public member function)
находит последнее отсутствие символов
(public member function)
находит последнее вхождение символов
(public member function of std::basic_string_view<CharT,Traits> )