Язык программирования C++. Вводный курс




Ввод - часть 3


(пробел), 'c', '\n'

(переход на новую строку), 'd', '\t' (табуляция), 'e' и '\n'. Однако приведенная программа читает лишь пять букв:

#include <iostream>

int main()

{

   char ch;

   // прочитать и вывести каждый символ

   while ( cin >> ch )

           cout << ch;

   cout << endl;

   // ...

}

И печатает следующее:

abcde

По умолчанию все пустые символы отбрасываются. Если нам нужны и они, например для сохранения формата входного текста или обработки пустых символов (скажем, для подсчета количества символов перехода на новую строку), то можно воспользоваться функцией-членом get()

класса istream

(обычно в паре с ней употребляется функция-член put()

класса ostream; они будут рассмотрены ниже). Например:

#include <iostream>

int main()

{

   char ch;

   // читать все символы, в том числе пробельные

   while ( cin.get( ch ))

           cout.put( ch );

   // ...

}

Другая возможность сделать это – использовать манипулятор noskipws.

Каждая из двух данных последовательностей считается составленной из пяти строк, разделенных пробелами, если для чтения используются операторы ввода с типами const char* или string:

A fine and private place

"A fine and private place"

Наличие кавычек не делает пробелы внутри закавыченной строки ее частью. Просто открывающая кавычка становится начальным символом первого слова, а закрывающая – конечным символом последнего.

Вместо того чтобы читать из стандартного ввода по одному символу, можно воспользоваться потоковым итератором istream_iterator:

#include <algorithm>

#include <string>

#include <vector>

#include <iostream>

int main()

{

           istream_iterator< string > in( cin ), eos ;

           vector< string > text ;

           // копировать прочитанные из стандартного ввода значения

     // в вектор text

           copy( in , eos , back_inserter( text ) ) ;

           sort( text.begin() , text.end() ) ;

           // удалить дубликаты

           vector< string >::iterator it;

           it = unique( text.begin() , text.end() ) ;

           text.erase( it , text.end() ) ;

           // вывести получившийся вектор

           int line_cnt = 1 ;

           for ( vector< string >::iterator iter = text.begin() ;

           iter != text.end() ; ++iter , ++line_cnt )

               cout << *iter

                    << ( line_cnt % 9 ? " " : "\n" ) ;

           cout << endl;

<


Содержание  Назад  Вперед