Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование_на_С++_Ч2_ООП.doc
Скачиваний:
54
Добавлен:
22.02.2015
Размер:
633.34 Кб
Скачать

Строковые потоки

Строковые потоки позволяют считывать и записывать информацию из областей оперативной памяти так же, как и из файла, с консоли или на дисплей. В стандартной библиотеке определено три класса строковых потоков:

istringstream – входные строковые потоки;

ostringstream – выходные строковые потоки;

stringstream – двунаправленные строковые потоки.

Эти классы определены в заголовочном файле <sstream> и являются производными от классов istream, ostream и iostream соответственно.

Участки памяти, с которыми выполняются операции чтения и извлечения, по стандарту определяются как строки С++ (класс string). Строковый класс будет рассмотрен далее. Строковые потоки создаются и связываются с этими участками памяти с помощью конструкторов:

explicit istringstream (int mode = ios :: in);

explicit istringstream (const string & name, int mode = ios :: in);

explicit ostringstream (int mode = ios :: out);

explicit ostringstream (const string & name, int mode = ios :: out);

explicit stringstream (int mode = ios :: in | ios :: out);

explicit stringstream (const string & name, int mode = ios :: in | ios :: out);

Здесь слово explicit указывает на то, что эти конструкторы вызываются только явным образом.

В строковых потоках описан метод str, возвращаюший копию строки или устанавливающий ее значение:

string str ( ) const;

void str (const string & S);

Пример. Строковый поток используется для формирования сообщения, включающего текущее время и передаваемый в качестве параметра номер:

# include <sstream>

# include <string>

# include <iostream>

# include <ctime>

using namespace std;

string message (int i) {

ostringstream os;

time_t t;

time (&t); // Функция возвращает текущие дату и время в виде time_t

os << "time: " << ctime (&t) <<"number: " << i << endl;

return os.str ( );

// Функция ctime () превращает время

// в строку

}

int main ( ) {

cout << message (22);

return 0;}

Строки

С++ не содержит стандартного типа данных «строка». Вместо этого он поддерживает массивы символов, завершающиеся нуль-символом. Библиотека содержит функции для работы с такими массивами, унаследованные от С и описанные в заголовочном файле <string.h>.

Тип данных (класс) string стандартной библиотеки лишен недостатков, присущих массивам символов. Основные действия со строками выполняются в нем с помощью операций и методов, а длина строки изменяется динамически. Для использования класса необходимо подключать к программе заголовочный файл <string>.

Конструкторы и присваивание строк

В классе string определено несколько конструкторов:

srting ( ); // создает пустой объект типа string

string (const *char); // создает объект типа “строка” на основе строки

// старого стиля

string (const *char, int n); // создает объект типа string и записывает туда

// n символов из строки, указанной

// первым параметром

string (string &); // конструктор копирования, создающий новый объект

// как копию объекта, переданного ему в качестве параметра

В классе string определены три операции присваивания:

string & operator = (const string & str);

string & operator = (const char * s);

string & operator = (char c);

Примеры

string s1;

string s2 (“Вася”);

string s3 (s2);

s1 = ‘x’;

s2 = s3;