Читать «C++: базовый курс» онлайн - страница 325

Herbert Schildt

 // Демонстрируем использование функции insert().

 cout << "Вставляем строку str2 в строку str1:\n";

 str1.insert(5, str2);

 cout << str1 << "\n\n";

 // Демонстрируем использование функции erase().

 cout << "Удаляем 7 символов из строки str1:\n";

 str1.erase(5, 7);

 cout << str1 <<"\n\n";

 // Демонстрируем использование функции replace().

 cout << "Заменяем 2 символа в str1 строкой str2:\n";

 str1.replace(5, 2, str2);

 cout << str1 << endl;

 return 0;

}

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

Исходные строки:

str1: Это простой тест.

str2: ABCDEFG

Вставляем строку str2 в строку str1:

Это пABCDEFGростой тест.

Удаляем 7 символов из строки str1:

Это простой тест.

Заменяем 2 символа в str1 строкой str2:

Это пABCDEFGстой тест.

Поиск в строке

В классе 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 (т.е. она находит в вызывающей строке последнее вхождение строки, заданной параметром strob). Если поиск прошел удачно, функция rfind() возвращает индекс, по которому в вызывающей строке было обнаружено совпадение. Если совпадения не обнаружено, возвращается значение npos.

Рассмотрим короткий пример использования функции 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() возвратит нуль.