}
//2. выходной строковый поток как средство записи данных без форматирования // и средство конкатенации строк
#include <strstrea.h>
void main()
{
char stroka1[ ] =”Minsk ”;
char stroka2[ ] =”Vilnus”;
char result[60];
ostrstream (result, sizeof(result)).write(stroka1, sizeof(stroka1));
ostrstream (result, sizeof(result), ios::ate).write(stroka2, sizeof(stroka2));
cout << result<< endl; // Minsk Vilnus
}
//3. строковый поток как средство «сбора» и вывода данных разных типов
#include <strstrea.h>
void main()
{
char buf[200];
ostrstream outstr(buf, sizeof(buf));
outstr << 123 <<’ ‘<< -456<<’ ‘<<+1.234<<’ ‘;
outstr << -0.123 <<’ ‘<<+123.456e-2<<ends;
cout << buf<< endl; // 123 -456 1.234 -0.123 1.23456
}
Манипулятор ends действует только при выводе и обеспечивает включение в поток нулевого признака конца строки.
Двунаправленные строковые потоки создаются с помощью конструктора (функции-члена) класса istrstream:
strstream имя_потока(char *buf, intlen, intmode);
где buf – указатель на участок основной памяти (буфер потока, обычно символьный массив), параметрintlenопределяет размеры буфера в байтах, параметр intmode определяет режим обмена:
ios::in, ios::out – определяют направление обмена;
ios::ate и ios::app – определяют размещение позиции чтения/записи в буфере;
//1. использование двунаправленного строкового потока для записи и вывода данных #include <strstrea.h>
#include <iostream.h>
#include <iomanip.h> //setiosflags()
const int SIZE = 80; //размер буфера
intmain()
{
char ch = 'x'; //тестовые данные
int j = 77;
double d = 67890.12345;
char str1[] = "Kafka";
char str2[] = "Freud";
char b[80];
char membuff[SIZE]; //строка-буфер
strstream iomem (membuff, SIZE, ios::in|ios::out); // илиstringstream //создание объекта-потока для вывода //в строку-буфер размера SIZE
iomem << "ch=" << ch << endl //форматируем вывод в созданный поток
<< "j=" << j << endl
<< setiosflags(ios::fixed)
<< setprecision(2)
<< "d=" << d << endl
<< "str1=" << str1 << endl
<< "str2=" << str2 << endl
<< ends; //завершение буфера-строки символом '\0'
cout << membuff; //вывод на экран содержимого буфера-строки
iomem.seekg(0L, ios::beg); //установка потока в его начало
iomem>> b;
cout<< b << endl; // ch=x
iomem >> b;
cout << b << endl; // j=77
iomem.getline(b, sizeof(b), '\0'); //вводится в b остаток буфера
cout << b; // вывод остатка буфера
cout << endl << endl;
cout << iomem.str(); //вывод всего буфера обеспечивает метод str()
return 0;
}
Результат работы программы:
ch=x
j=77
d=67890.12
str1=Kafka
str2=Freud
ch=x
j=77
d=67890.12
str1=Kafka
str2=Freud
ch=x
j=77
d=67890.12
str1=Kafka
str2=Freud
//2. использование двунаправленного строкового потока для записи и вывода данных #include <strstrea.h>
#include <iostream.h>
#include <iomanip.h> //setiosflags()
const int SIZE = 80; //размер буфера
intmain()
{
char buf[SIZE*3];
char stroka1[SIZE];
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.