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

Herbert Schildt

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

Несмотря на неоспоримую полезность объектов типа 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;

 else cout << "Такого слова в словаре нет.\n";

 return 0;

}

И еще об STL

Библиотека STL — важная составляющая языка C++. Многие задачи программирования можно описать, используя терминологию STL. Эта библиотека великолепно сочетает силу своих средств с гибкостью их применения. Несмотря на то что ее синтаксис немного сложноват, он быстро осваивается. Ни один уважающий себя С++-программист не может пренебречь возможностями библиотеки STL, поскольку она — не только настоящее, но и будущее С++-программирования.

Глава 22: Препроцессор C++

Заключительная глава книги посвящена описанию препроцессора C++. Препроцессор C++ — это часть компилятора, которая подвергает вашу программу различным текстовым преобразованиям до реальной трансляции исходного кода в объектный. Программист может давать препроцессору команды, называемые директивами препроцессора (preprocessor directives), которые, не являясь формальной частью языка C++, способны расширить область действия его среды программирования.