Строковый ввод
Считывание можно производить как в C-строки, так и в объекты класса string. Мы рекомендуем пользоваться последними. Их главное преимущество – автоматическое управление памятью для хранения символов. Чтобы прочитать данные в C-строку, т.е. массив символов, необходимо сначала задать его размер, достаточный для хранения строки. Обычно мы читаем символы в буфер, затем выделяем из хипа ровно столько памяти, сколько нужно для хранения прочитанной строки, и копируем данные из буфера в эту память:
#include <iostream>
#include <string.h>
char inBuf[ 1024 ];
try
{
while ( cin >> inBuf ) {
char *str = new char[ strlen( inBuf ) + 1 ];
strcpy( str, inBuf );
// ... сделать что-то с массивом символов str
delete [] str;
}
}
catch( ... ) { delete [] str; throw; }
Работать с типом string значительно проще:
#include <iostream>
#include <string.h>
string str;
while ( cin >> str )
// ... сделать что-то со строкой
Рассмотрим операторы ввода в C-строки и в объекты класса string. В качестве входного текста по-прежнему будет использоваться рассказ об Алисе Эмме:
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?"
Поместим этот текст в файл alice_emma, а затем перенаправим на него стандартный вход программы. Позже, когда мы познакомимся с файловым вводом, мы откроем и прочтем этот файл непосредственно. Следующая программа помещает прочитанные со стандартного ввода слова в C-строку и находит самое длинное слово:
#include <iostream.h>
#include <string.h>
int main()
{
const int bufSize = 24;
char buf[ bufSize ], largest[ bufSize ];