Бьерн Страуструп - Язык программирования С++. Главы 9-10
Страница 41. Строковые потоки



10.5.2 Строковые потоки

Как было показано, поток может быть привязан к файлу, т.е. массиву
символов, хранящемуся не в основной памяти, а, например, на диске. Точно
так же поток можно привязать к массиву символов в основной памяти.
Например, можно воспользоваться выходным строковым потоком ostrstream
для форматирования сообщений, не подлежащих немедленной печати:

     char* p = new char[message_size];
     ostrstream ost(p,message_size);
     do_something(arguments,ost);
     display(p);

С помощью стандартных операций вывода функция do_something может писать
в поток ost, передавать ost подчиняющимся ей функциям и т.п. Контроль
переполнения не нужен, поскольку ost знает свой размер и при заполнении
перейдет в состояние, определяемое fail(). Затем функция display может
послать сообщение в "настоящий" выходной поток. Такой прием наиболее
подходит в тех случаях, когда окончательная операция вывода
предназначена для записи на более сложное устройство, чем традиционное,
ориентированное на последовательность строк, выводное устройство.
Например, текст из ost может быть помещен в фиксированную область на экране.
        Аналогично, istrstream является вводным строковым потоком,
читающим из последовательности символов, заканчивающейся нулем:

     void word_per_line(char v[], int sz)
     /*
        печатать "v" размером "sz" по одному слову в строке
     */
     {
        istrstream ist(v,sz);  // создать istream для v
        char b2[MAX];          // длиннее самого длинного слова
        while (ist>>b2) cout <<b2 << "\n";
      }

Завершающий нуль считается концом файла.
        Строковые потоки описаны в файле <strstream.h>.

 
« Предыдущая статья   Следующая статья »