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

         

Эта функция работает правильно, но


}

Эта функция работает правильно, но множество символов, которые мы собираемся отбрасывать, “зашито” в код. Лучше дать пользователю возможность самому передать строку, содержащую такие символы. Если он согласен на множество по умолчанию, то может передать пустую строку.











#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
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий