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

Herbert Schildt

 cout << str3 << "\n";

 // Сравнение string-объектов.

 if(str3 > str1) cout << "str3 > str1\n";

 if(str3 == str1 + str2)

  cout << "str3 == str1+str2\n";

 /* Объекту класса string можно также присвоить обычную строку. */

 str1 = "Это строка с завершающим нулем.\n";

 cout << str1;

 /* Создание string-объекта с помощью другого string-объекта. */

 string str4 (str1);

 cout << str4;

 // Ввод строки.

 cout << "Введите строку: ";

  cin >> str4;

 cout << str4;

 return 0;

}

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

Класс string позволяет эффективно

Класс string позволяет эффективно

Класс string позволяет эффективно обрабатывать строки.

str3 > str1

str3 == str1+str2

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

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

Введите строку: Привет

Привет

Обратите внимание на то, как легко теперь выполняется обработка строк. Например, оператор "+" используется для конкатенации строк, а оператор ">" — для сравнения двух строк. Для выполнения этих операций с использованием С-стиля обработки строк, т.е. использования строк с завершающим нулем, пришлось бы применять менее удобные средства, а именно вызывать функции strcat() и strcmp(). Поскольку С++-объекты типа string можно свободно смешивать с С-строками, их (string-объекты) можно использовать в любой программе не только безо всякого ущерба для эффективности, но даже с заметным выигрышем.

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

Обзор функций-членов класса string

Если самые простые операции со строками можно реализовать с помощью операторов, то при выполнении более сложных не обойтись без функций-членов класса string. Класс string содержит слишком много функций-членов, мы же рассмотрим здесь только самые употребительные из них.

Важно! Поскольку класс string— контейнер, он поддерживает такие обычные контейнерные функции, как begin(), end() и size().

Основные манипуляции над строками

Чтобы присвоить одну строку другой, используйте функцию assign(). Вот как выглядят два возможных формата ее реализации.

string &assign(const string &strob, size_type start, size_type num);

string &assign(const char *str, size_type num);

Первый формат позволяет присвоить вызывающему объекту num символов из строки, заданной параметром strob, начиная с индекса start. При использовании второго формата вызывающему объекту присваиваются первые num символов строки с завершающим нулем, заданной параметром str. В каждом случае возвращается ссылка на вызывающий объект. Конечно, гораздо проще для присвоения одной полной строки другой использовать оператор "=". О функции-члене assign() вспоминают, в основном, тогда, когда нужно присвоить только часть строки.