Входные строковые потоки создаются с помощью конструктора (функции-члена) класса istrstream:
istrstream имя_потока(char *str);
где указатель str на уже существующий участок основной памяти – обязательный параметр конструктора. Например, операторы:
char buf[40];
istrstream inBuf(buf);
определят входной строковый поток с именем inBuf и свяжут его с участком памяти, предварительно выделенным для символьного массива buf[]. Теперь этот строковый поток inBuf может использоваться как левый операнд операции извлечения >>.
//1. строковый поток как средство извлечения данных из строки
#include <strstrea.h>
void main()
{
char *stroka=”123.4 Minsk”;
istrstream instr(stroka);
char ar[10];
double d; instr>> d >> ar;
cout << ar << “ ”<< d<< endl; // Minsk 123.4
}
//2. строковый поток для чтения информации, передаваемой в качестве // параметра командной строки
#include <strstrea.h>
voidmain(intargc, char *argv[]) //если при запуске программы в командной строке
// указаны параметры в виде d:\lab6_1.exe Potokaaaaabbbbb<Enter>
{
char name [20];
istrstream in1(argv[1]); //создаем строковый потокin1
istrstream in2(argv[2]); //создаем строковый потокin2
in1 >> name;
cout << name<< endl; // Potok
in2>> name;
cout << name<< endl; // aaaaa
}
//3. использование строкового потока для копирования строк
#include <strstrea.h>
voidmain()
{
char *line = ”aaaaa bbbbb \tccccc\nddddd eeeee\tfffff”;
istrstream in(line); //создаем строковый поток
char stroka[50];
in.getline(stroka, sizeof(stroka), ‘\0’); //в stroka получаем копию line
cout << stroka<< endl; //aaaaa bbbbb ccccc
//ddddd eeeee fffff
}
Напомним, что функция getline позволяет читать всю строку полностью, а не только до первого пробельного символа.
//4. использование безымянного входного строкового потока
#include <strstrea.h>
voidmain(intargc, char *argv[]) //если при запуске программы в командной строке
// указаны параметры в виде d:\lab6_1.exe Potokaaaaabbbbb<Enter>
{
char name [20];
istrstream (argv[0]) >> name; //создаем безымянный строковый поток,
//используем в качестве буфера argv[0] и сразу читаем его содержимое
cout << name<< endl; // d:\lab6_1.exe Potok
}
Напомним, что argv[0] всегда содержит полное наименование программы с указанием диска и полного пути к каталогу, где находится EXE-файл. Для чтения последующих аргументов из командной строки используются argv[1], argv[2] и т.д.
Выходные строковые потоки создаются с помощью конструктора (функции-члена) класса istrstream:
ostrstream имя_потока(char *str, intlen, intmode);
где указатель str на уже существующий участок основной памяти (буфер), параметрintlenопределяет размеры буфера, параметр intmode определяет режим обмена.
ios::out – строковый поток создается для вывода, запись информации ведется с начала строки (устанавливается по умолчанию);
ios::ate – позиция записи устанавливается в месте размещения нулевого признака конца строки ‘\0’ (запись в продолжение);
ios::app – для строковых типов этот флаг действует аналогично флагуios::ate);
//1. использование безымянного выходного строкового потока для вывода // аргумента argv[0] командной строки
#include <strstrea.h>
voidmain(intargc, char *argv
{
char name [80];
ostrstream (name, sizeof(name)) << argv[0] << ‘\0’; //создаем безымянный поток //с буфером name и выводим в него argv[0] cout << name<< endl; // d:\lab6_1.exe Potok
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.