С++ для начинающих


         

новое самое длинное слово? сохраним


                  ++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 ))


Содержание  Назад  Вперед