Строковые потоки ввода-вывода (буферизованный ввод-вывод).
Строковые потоки (или потоки буферизированного ввода-вывода (arrat-base I/O)) используют в качестве физического устройства ввода-вывода буфер памяти (символьный массив).
Особенности:
· <strstream> - старая библиотека системы буферизованного ввода-вывода, которая содержит описания классов для работы с массивом символов типа char (классы istrstream, ostrstream, strstream и strstreambuf (низкоуровневое управление строковым потоком)).
· <sstream> - новая библиотека системы буферизованного ввода-вывода на основе шаблонных классов.
В новой библиотеке <sstream> создаются две специализации шаблонных классов:
· char – для поддержки 8-битовых(байтовых) строковых потоков (классы istringstream, ostringstream, stringstream).
· wchar_t – для поддержки строковых потоков расширенных символов (классы wistringstream, wostringstream, wstringstream)
Низкоуровневые средства управления строковым потоком доступны в классе stringbuf(wstringbuf).
Создание строковых потоков:
istrstream::istrstream(const char *byf);
istrstream::istrstream(const char *byf, streamsize size);
istrstream::istrstream(const char *byf, streamsize size, openmode mode = ios::out);
ostrstream::ostrstream();
ostrstream::ostrstream(const char *byf, streamsize size, openmode mode = ios::out|ios::in);
strstream::strstream();
Особенности:
· byf– указатель на массив, который используется доя выполнения операции ввода-вывода (при операциях ввода массив должен заканчиваться нулевым символом);
· size– размер символьного массива (при указании размера буфера строка в нём может не завершаться нулевым байтом).
· mode– способ открытия (значения можно комбинировать с помощью логического «или», обычно используют по умолчанию).
· При использовании конструктора по умолчанию поток будет связан с динамическим массивом (растёт автоматически)
Методы строковых потоков:
· Определение количества символов, записанных в символьный массив (возрастает количество записанных символов с учётом нулевого байта). streamsize pcount();
· «заморозка» (блокировка для вывода) динамического массива и открытие доступа к его элементам (возвращает указатель на буфер символов). char *str();
· Управление доступом к динамическому массиву (true – «заморозка», false –«разморозка» массива).
void freeze (bool action = true);
int main()
{
char *s = "\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\20";
istrstream si(s);
char ch;
si.get(ch);
while(!si.eof())
{
cout << hex << showbase << (int) ch << " ";
si.get(ch);
}
return 0;
}
Дата добавления: 2022-02-05; просмотров: 280;