Функции поиска возвращают индекс искомого символа или значение npos, если искомое не найдено | |
|---|---|
s.find( | Ищет первое местоположение аргумента в строке s |
s.rfind( | Ищет последнее местоположение аргумента в строке s |
s.find_first_of( | Ищет первое местоположение любого символа аргумента в строке s |
s.find_last_of( | Ищет последнее местоположение любого символа аргумента в строке s |
s.find_first_not_of( | Ищет первое местоположение символа в строке s, который отсутствует в аргументе |
s.find_last_not_of( | Ищет последнее местоположение символа в строке s, который отсутствует в аргументе |
Аргумент может быть следующим | |
с, pos | Поиск символа с, начиная с позиции pos в строке s. По умолчанию pos имеет значение 0 |
s2, pos | Поиск строки s2, начиная с позиции pos в строке s. По умолчанию pos имеет значение 0 |
cp, pos | Поиск строки с завершающим нулевым символом в стиле С, на которую указывает указатель cp. Поиск начинается с позиции pos в строке s. По умолчанию pos имеет значение 0 |
cp, pos, n | Поиск первых n символов в массиве, на который указывает указатель cp. Поиск начинается с позиции pos в строке s. Аргумент pos и n не имеет значения по умолчанию |
string::size_type. Поэтому не следует использовать переменную типа int или другого знакового типа для содержания значения, возвращаемого этими функциями (см. раздел 2.1.2).
Самой простой является функция find(). Она ищет первое местоположение переданного аргумента и возвращает его индекс или значение npos, если соответствующее значение не найдено:
string name("AnnaBelle");
auto pos1 = name.find("Anna"); //
Возвращает значение 0, т.е. индекс, по которому подстрока "Anna" расположена в строке "AnnaBelle".
Поиск (и другие операции со строками) чувствительны к регистру. При поиске в строке регистр имеет значение:
string lowercase("annabelle");
pos1 = lowercase.find("Anna"); //
Этот код присвоит переменной pos1 значение npos, поскольку строка "Anna" не соответствует строке "anna".
Немного сложней искать соответствие любому символу в строке. Например, следующий код находит первую цифру в переменной name:
string numbers("0123456789"), name("r2d2");
//
auto pos = name.find_first_of(numbers);
Кроме поиска соответствия, вызвав функцию find_first_not_of(), можно искать первую позицию, которая
string dept("03714p3");
//
auto pos = dept.find_first_not_of(numbers);
Функциям поиска можно передать необязательный аргумент исходной позиции. Этот необязательный аргумент указывает позицию, с которой начинается поиск. По умолчанию значением этого аргумента является нуль. Общепринятой практикой программирования является использование этого аргумента в цикле перебора строки при поиске всех местоположений искомого значения.
string::size_type pos = 0;
//
while ((pos = name.find_first_of(numbers, pos))
!= string::npos) {
cout << "found number at index: " << pos
<< " element is " << name[pos] << endl;