(Файл fstream уже включает iostream, так что включать оба файла необязательно.) Файловый ввод/вывод поддерживается теми же операторами:
#include fstream
#include string
#include vector
#include algorithm
int main()
{
string ifile;
cout "Введите имя файла для сортировки: ";
cin ifile;
// сконструировать объект класса ifstream для ввода из файла
ifstream infile( ifile.c_str() );
if ( ! infile ) {
cerr "ошибка: не могу открыть входной файл: "
ifile endl;
return -1;
}
string ofile = ifile + ".sort";
// сконструировать объект класса ofstream для вывода в файл
ofstream outfile( ofile.c_str() );
if ( ! outfile) {
cerr "ошибка: не могу открыть выходной файл: "
ofile endl;
return -2;
}
string buffer;
vector string, allocator text;
int cnt = 1;
while ( infile buffer ) {
text.push_back( buffer );
cout buffer (cnt++ % 8 ? " " : "\n" );
}
sort( text.begin(), text.end() );
// выводим отсортированное множество слов в файл
vectorstring ::iterator iter = text.begin();
for ( cnt = 1; iter != text.end(); ++iter, ++cnt )
outfile *iter
(cnt % 8 ? " " : "\n" );
return 0;
}
Вот пример сеанса работы с этой программой. Нас просят ввести файл для сортировки. Мы набираем alice_emma (набранные на клавиатуре символы напечатаны полужирным шрифтом). Затем программа направляет на стандартный вывод все, что прочитала из файла:
Введите имя файла для сортировки: alice_emma
Alice Emma has long flowing red hair. Her
Daddy says when the wind blows through her
hair, it looks almost alive, like a fiery
bird in flight. A beautiful fiery bird, he
tells her, magical but untamed. "Daddy, shush, there
is no such creature," she tells him, at
the same time wanting him to tell her
more. Shyly, she asks, "I mean, Daddy, is
there?"
Далее программа выводит в файл outfile отсортированную последовательность строк. Конечно, на порядок слов влияют знаки препинания; в следующем разделе мы это исправим:
"Daddy, "I A Alice Daddy Daddy, Emma Her
Shyly, a alive, almost asks, at beautiful bird
bird, blows but creature," fiery fiery flight. flowing
hair, hair. has he her her her, him
him, in is is it like long looks
magical mean, more. no red same says she
she shush, such tell tells tells the the
there there?" through time to untamed. wanting when
wind
(В разделе 20.6 мы познакомимся с файловым вводом/выводом более подробно.)
* Библиотека iostream поддерживает также ввод/вывод в область памяти, при этом поток связывается со строкой в памяти программы. С помощью потоковых операторов ввода/вывода мы можем записывать данные в эту строку и читать их оттуда. Объект для строкового ввода/вывода определяется как экземпляр одного из следующих классов: istringstream, производный от istream, читает из строки;
* ostringstream, производный от ostream, пишет в строку;
* stringstream, производный от iostream, выполняет как чтение, так и запись.
Для использования любого из этих классов в программу нужно включить заголовочный файл
#include sstream
(Файл sstream уже включает iostream, так что включать оба файла необязательно.) В следующем фрагменте объект класса ostringstream используется для форматирования сообщения об ошибке, которое возвращается вызывающей программе.
#include sstream
string program_name( "our_program" );
string version( 0.01 );
// ...
string mumble( int *array, int size )
{
if ( ! array ) {