Шаг 26.
Библиотека STL.
Обзор функций-членов класса string. Поиск в строке

    На этом шаге мы рассмотрим организацию поиска в строке.

    В классе string предусмотрено несколько функций-членов, которые осуществляют поиск. Это, например, такие функции, как find() и rfind(). Рассмотрим прототипы самых употребительных версий этих функций.

   size_type find (const string &strob,size_type start=0) const;
   size_type rfind (const string &strob,size_type start = npos) const;

    Функция find(), начиная с позиции start, просматривает вызывающую строку на предмет поиска первого вхождения строки, заданной параметром strob. Если поиск успешен, функция find() возвращает индекс, по которому в вызывающей строке было обнаружено совпадение. Если совпадения не обнаружено, возвращается значение npos. Функция rfind() выполняет то же действие, но с конца. Начиная с позиции start, она просматривает вызывающую строку в обратном направлении на предмет поиска первого вхождения строки, заданной параметром strob. Если поиск прошел удачно, функция rfind() возвращает индекс, по которому в вызывающей строке было обнаружено совпадение. Если совпадения не обнаружено, возвращается значение npos.

    Пример использования функции find().

//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream>
#include <string>
#include <conio.h> //необходимо для getch()
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

std::string ToRus(const std::string &in)
{
  char *buff = new char [in.length()+1];
  CharToOem(in.c_str(),buff);
  std::string out(buff);
  delete [] buff;
  return out;
}


int main(int argc, char* argv[])
{
  int i;
  string s1 = "Класс string облегчает обработку строк.";
  string s2;

  cout << ToRus("Исходная строка: ");
  cout << ToRus(s1) << endl;
  
  i = s1.find("string");
  if (i != string::npos)
  {
  	cout << ToRus("Совпадение обнаружено в позиции ") << i << endl;
  	cout << ToRus("Остаток строки таков: ");
  	s2.assign(s1, i, s1.size());
  	cout << ToRus(s2);
  }

  getch();
  return 0;
}
//---------------------------------------------------------------------------
Текст этого примера можно взять здесь.

    Результаты выполнения этой программы представлены на рисунке 1.


Рис.1. Результат работы приложения

    На следующем шаге мы рассмотрим сравнение строк.




Предыдущий шаг Содержание Следующий шаг