новое самое длинное слово? сохраним
++cnt;
// новое самое длинное слово? сохраним его
if ( curLen > max )
{
max = curLen;
largest = buf;
}
}
cout << "Число прочитанных слов " << cnt << endl;
cout << "Длина самого длинного слова " << max << endl;
cout << "Самое длинное слово " << largest << endl;
}
Однако запятая и кавычка по-прежнему считаются частью слова. Напишем функцию для удаления этих символов из слова:
#include <string>
void filter_string( string &str )
{
// элементы, подлежащие фильтрации
string filt_elems( "\",?." );
string::size_type pos = 0;
while (( pos = str.find_first_of( filt_elems, pos ))
!= string::npos )
str.erase( pos, 1 );
}
Эта функция работает правильно, но множество символов, которые мы собираемся отбрасывать, “зашито” в код. Лучше дать пользователю возможность самому передать строку, содержащую такие символы. Если он согласен на множество по умолчанию, то может передать пустую строку.
#include <string>
void filter_string( string &str,
string filt_elems = string("\",."))
{
string::size_type pos = 0;
while (( pos = str.find_first_of( filt_elems, pos ))
!= string::npos )
str.erase( pos, 1 );
}
Более общая версия filter_string() принимает пару итераторов, обозначающих диапазон, где производится фильтрация:
template <class InputIterator>
void filter_string( InputIterator first, InputIterator last,
string filt_elems = string("\",."))
{
for ( ; first != last; first++ )
{
string::size_type pos = 0;
while (( pos = (*first).find_first_of( filt_elems, pos ))
Содержание Назад Вперед