Эта функция работает правильно, но
}
Эта функция работает правильно, но множество символов, которые мы собираемся отбрасывать, “зашито” в код. Лучше дать пользователю возможность самому передать строку, содержащую такие символы. Если он согласен на множество по умолчанию, то может передать пустую строку.
#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 )) != string::npos ) (*first).erase( pos, 1 ); } |
}
С использованием этой функции программа будет выглядеть так:
#include <string> #include <algorithm> #include <iterator> #include <vector> #include <iostream> bool length_less( string s1, string s2 ) { return s1.size() < s2.size(); } int main() { istream_iterator< string > input( cin ), eos; vector< string > text; // copy - это обобщенный алгоритм copy( input, eos, back_inserter( text )); string filt_elems( "\",.;:"); filter_string( text.begin(), text.end(), filt_elems ); int cnt = text.size(); // max_element - это обобщенный алгоритм string *max = max_element( text.begin(), text.end(), length_less ); int len = max->size(); cout << "Число прочитанных слов " << cnt << endl; cout << "Длина самого длинного слова " << len << endl; cout << "Самое длинное слово " << *max << endl; |
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий