- •Часть 4. Стандартная библиотека
- •Екатеринбург
- •Введение
- •Потоковые классы
- •Стандартные потоки
- •Форматирование данных
- •Флаги и форматирующие методы
- •Манипуляторы
- •Методы обмена с потоком
- •Ошибки потоков
- •Файловые потоки
- •Строковые потоки
- •Конструкторы и присваивание строк
- •Операции
- •Функции Присваивание и добавление частей строк
- •Преобразование строк
- •Поиск подстрок
- •Сравнение частей строк
- •Получение характеристик строк
- •Оглавление
- •Часть 4. Стандартная библиотека
- •620002, Екатеринбург, ул.Мира, 19
- •620002, Екатеринбург, ул.Мира, 19
Строковые потоки
Строковые потоки позволяют считывать и записывать информацию из областей оперативной памяти так же, как и из файла, с консоли или на дисплей. В стандартной библиотеке определено три класса строковых потоков:
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;