Программирование >>  Операторы преобразования типа 

1 ... 198 199 200 [ 201 ] 202 203 204 ... 239


О шаблон baslc ostringstream со специализациями ostringstream и wostringstream для записи в строки ( строковый выходной поток данных -);

О шаблон basic stringstream со специализациями stringstream и wstringstream для чтения и записи в строки;

О шаблон basic stringbuf<> со специализациями stringbuf и wstringbuf используется другими классами строковых потоков данных для реальных чтения и записи символов.

По аналогии с классами файловых потоков данных эти классы объединены в иерархию, изображенную на рис. 13.3.

ioe

base

basic

ios 7

ioao

wios

baalc str*ainbuf<>

streambuf / wstreambuf


{virtual\

baic i stream<>

istream / wiatream


ba s i c str IngbufО

stringbuf / wstringbuf

basic ostream<>

ostream / wostream



basic ioatream<>

iostream / wiostream

baa ic is trlnga treamo

istringstream/wistringstream

bas i c os tr ingatreamO

Qstringstream/wostringstream

b a a i c s t r i ngs t r eajttO

stringstream/wstringstream

Рис 13.3. Иерархия классов строковых потоков данных

Эти классы определяются в заголовочном файле <sstream> следующим образом:

namespace std {

template <class charT.

class traits = char traits<charT>. class Allocator = allocator<charT> > class basicjstringstream; typedef basicjstringstream <char> istringstream; typedef basicJstringstrGam<wchar t> wlstrlngstream;



template <class charT.

class traits = char tra1ts<charT>.

class Allocator = allocator<charT> > class bas1c ostringstream; typedef bas1c ostr1ngstream<char> ostringstream; typedef bas1c ostringstream<wchar t> wostdngstream;

template <class charT.

class traits * char tra1ts<charT>.

class Allocator = allocator<charT> > class bas1c str1ngstream; typedef bas1c str1ngstream<char> stringstream: typedef basic str1ngstream<wchar t> wstringstream:

template <class charT.

class traits = char tra1ts<charT>.

class Allocator = allocator<charT> > class bas1c filebuf; typedef bas1c filebuf<char> stringbuf: typedef bas1c filebuf<wchar t> wstringbuf:

Главная функция в интерфейсе строковых потоков данных, str(), используется для работы с потоковым буфером (табл. 13.39).

Таблица 13.39. Основные операции со строковыми потоквми данных Функция Описание

str() Возвращает буфер в виде строки

str(string) Присваивает string содержимое буфера

Пример использования строковых потоков данных:

lo/sstrl.cpp #1nclude <iostream> #1nclude <sstream> #1nclude <bitset> using namespace std;

int mainO {

ostringstream os;

Десятичное и шестнадцатеричное значение

OS dec: 15 hex hex: 15 endl;

cout os.strO endl:

Присоединение вещественного числа и битового поля bitset<15> b(5789);

OS float: 4.67 bitset: b endl;



Перезапись восьмеричным числом os.seekp(O):

OS oct: Oct 15: cout os.strO endl;

Результат выполнения программы выглядит так: dec: 15 hex: f

oct: 17 hex: f

float; 4.67 bitset: 001011010011101

Сначала в os выводятся два числа, десятичное и шестнадцатеричное. Затем к ним присоединяется вещественное число и битовое поле (в двоичном виде). Функция seekpO перемещает позицию записи в начало потока данных, поэтому при следующем вызове оператора << данные записываются в начало строки с перезаписью существующего строкового потока данных. Тем не менее символы, которые не были перезаписаны, остаются действительными. Если вы хотите полностью удалить текущее содержимое потока данных, присвойте новое содержимое буфера функцией str():

strm.strC ):

Первые строки, записанные в os, завершаются манипулятором endl. Это означает, что в конце вывода производится перевод строки. Поскольку за строкой в поток данных также выводится манипулятор endl, в результате будут записаны два символа новой строки подряд. Этим объясняется наличие пустых строк в выходных данных.

При работе со строковыми потоками данных программисты часто допускают распространенную ошибку - они забьгаает извлечь строку функцией strQ и вместо этого выводят объект потока данных. С точки зрения компилятора это вполне разумно и возможно, поскольку существует преобразование к void*. В результате состояние потока данных выводится в виде адреса (см. с. 571).

Одним из типичных применений строковых выходных потоков данных является определение операторов вывода для пользовательских типов (см. с. 626).

Строковые входные потоки данных в основном используются для форматированного чтения из существующих строк. Например, часто бывает проще читать дашше но строками зательанализирозатькаждуюетроку -отдельности. В следующем фрагменте из строки s читается целое число х, равное 3, и вещественное число f, равное 0.7:

int Х;

float f;

std:;string s * 3.7 :

std::istringstream is(s); is X f;

При создании строковых потоков дайных могут задаваться флаги режима открытия файла (см. с. 606) и/нли существующие строки. С флагами ios::app



1 ... 198 199 200 [ 201 ] 202 203 204 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика