Выбрать главу

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

#include <iostream>

#include <string>

using namespace std;

int main()

{

 int i;

 string s1 ="Класс string облегчает обработку строк.";

 string s2;

 i = s1.find("string");

 if(i != string::npos) {

  cout << "Совпадение обнаружено в позиции " << i<< endl;

  cout << "Остаток строки таков: ";

  s2.assign (s1, i, s1.size());

  cout << s2;

 }

 return 0;

}

Программа генерирует такие результаты.

Совпадение обнаружено в позиции 6

Остаток строки таков: string облегчает обработку строк.

Сравнение строк

Чтобы сравнить полное содержимое одного string-объекта с другим, обычно используются описанные выше перегруженные операторы отношений. Но если нужно сравнить часть одной строки с другой, вам придется использовать функцию-член compare().

int compare(size_type start, size_type num, const string &strob) const;

Функция compare() сравнивает с вызывающей строкой num символов строки, заданной параметром strob, начиная с индекса start. Если вызывающая строка меньше строки strob, функция compare() возвратит отрицательное значение. Если вызывающая строка больше строки strob, она возвратит положительное значение. Если строка strob равна вызывающей строке, функция compare() возвратит нуль.

Получение строки с завершающим нулем

Несмотря на неоспоримую полезность объектов типа string, возможны ситуации, когда вам придется получать из такого объекта символьный массив с завершающим нулем, т.е. его версию С-строки. Например, вы могли бы использовать string-объект для создания имени файла. Но, открывая файл, вам нужно задать указатель на стандартную строку с завершающим нулем. Для решения этой проблемы и используется функция-член c_str(). Вот как выглядит ее прототип:

const char *c_str() const;

Эта функция возвращает указатель на С-версию строки (т.е. на строку с завершающим нулевым символом), которая содержится в вызывающем объекте типа string. Полученная строка с завершающим нулем изменению не подлежит. Кроме того, после выполнения других операций над этим string-объектом допустимость применения полученной С-строки не гарантируется.

Хранение строк в других контейнерах

Поскольку класс string определяет тип данных, можно создать контейнеры, которые будут содержать объекты типа string. Рассмотрим, например, более удачный вариант программы-словаря, которая была показана выше.

/* Использование отображения string-объектов для создания словаря.

*/

#include <iostream>

#include <map>

#include <string>

using namespace std;

int main()

{

 map<string, string> dictionary;

 dictionary.insert( pair<string, string> ("дом", "Место проживания."));

 dictionary.insert( pair<string, string> ("клавиатура", "Устройство ввода данных."));

 dictionary.insert( pair<string, string> ("программирование", "Процесс создания программы."));

 dictionary.insert( pair<string, string> ("STL", "Standard Template Library"));

 string s;

 cout << "Введите слово: ";

  cin >> s;

 map<string, string>::iterator p;

 p = dictionary.find(s);

 if(p != dictionary.end())

  cout << "Определение: " << p->second;