и запуска программа выводит следующие
}
После компиляции и запуска программа выводит следующие сведения:
Число прочитанных слов 65
Длина самого длинного слова 10
Самое длинное слово creature,"
На самом деле этот результат неправилен: самое длинное слово beautiful, в нем девять букв. Однако выбрано creature, потому что программа сочла его частью запятую и кавычку. Следовательно, необходимо отфильтровать небуквенные символы.
Но прежде чем заняться этим, рассмотрим программу внимательнее. В ней каждое слово помещается в массив buf, длина которого равна 24. Если бы в тексте попалось слово длиной 24 символа (или более), то буфер переполнился бы и программа, вероятно, закончилась бы крахом. Чтобы предотвратить переполнение входного массива, можно воспользоваться манипулятором setw(). Модифицируем предыдущую программу:
while ( cin >> setw( bufSize ) >> buf )
Здесь bufSize – размер массива символов buf. setw() разбивает строку длиной bufSize или больше на несколько строк, каждая из которых не длиннее, чем bufSize - 1.
Завершается такая частичная строка двоичным нулем. Для использования setw() в программу необходимо включить заголовочный файл iomanip:
#include <iomanip>
Если в объявлении массива buf
размер явно не указан:
char buf[] = "Нереалистичный пример";
то программист может применить оператор sizeof, но при условии, что идентификатор является именем массива и находится в области видимости выражения:
while ( cin >> setw(sizeof( buf )) >> buf )
Применение оператора sizeof в следующем примере дает неожиданный результат:
#include <iostream> #include <iomanip> int main() { const int bufSize = 24; char buf[ bufSize ]; char *pbuf = buf; // если строка длиннее, чем sizeof(char*), // она разбивается на несколько строк while ( cin >> setw( sizeof( pbuf )) >> pbuf ) cout << pbuf << endl; |
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий