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
#include
#include
using namespace std;
int main()
{
map dictionary;
dictionary.insert( pair ("дом", "Место проживания."));
dictionary.insert( pair ("клавиатура", "Устройство ввода данных."));
dictionary.insert( pair ("программирование", "Процесс создания программы."));
dictionary.insert( pair ("STL", "Standard Template Library"));
string s;
cout << "Введите слово: ";
cin >> s;
map::iterator p;
p = dictionary.find(s);
if(p != dictionary.end())
cout << "Определение: " << p->second;
else cout << "Такого слова в словаре нет.\n";
return 0;
}
И еще об STL Библиотека STL — важная составляющая языка C++. Многие задачи программирования можно описать, используя терминологию STL. Эта библиотека великолепно сочетает силу своих средств с гибкостью их применения. Несмотря на то что ее синтаксис немного сложноват, он быстро осваивается. Ни один уважающий себя С++-программист не может пренебречь возможностями библиотеки STL, поскольку она — не только настоящее, но и будущее С++-программирования.
Глава 22: Препроцессор C++
Заключительная глава книги посвящена описанию препроцессора C++. Препроцессор C++ — это часть компилятора, которая подвергает вашу программу различным текстовым преобразованиям до реальной трансляции исходного кода в объектный. Программист может давать препроцессору команды, называемые директивами препроцессора
(preprocessor directives), которые, не являясь формальной частью языка C++, способны расширить область действия его среды программирования.Препроцессор C++ включает следующие директивы.
Как видите, все директивы препроцессора начинаются с символа '#'
.Теперь рассмотрим каждую из них в отдельности.