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




Приводим слова к стандартной форме - часть 2


{

    vector<string,allocator>::iterator

                  iter = words->begin(),

                  iter_end = words->end();

    while ( iter != iter_end ) {

        // оставим слова короче трех букв как есть

        if ( (*iter).size() <= 3 )

            { ++iter; continue; }

        if ( (*iter)[ (*iter).size()-1 ] == 's' )

            suffix_s( *iter );

        // здесь мы могли бы обработать суффиксы

        // ed, ing, 1y

        ++iter;

    }

}

Слова из трех и менее букв мы пропускаем. Это позволяет оставить без изменения, например, has, its, is и т.д., однако слова tv и tvs мы не сможем распознать как одинаковые.

Если слово кончается на "ies", как babies и cries, необходимо заменить "ies" на "y":

string::size_type pos() = word.size()-3;

string ies( "ies" );

if ( ! word.compare( pos3, 3, ies )) {

    word.replace( pos3, 3, 1, 'у' );

    return;

}

compare() возвращает 0, если две строки равны. Первый аргумент, pos3, обозначает начальную позицию, второй – длину сравниваемой подстроки (в нашем случае 3). Третий аргумент, ies, – строка-эталон. (На самом деле существует шесть вариантов функции compare(). Остальные мы покажем в следующем разделе.)

replace() заменяет подстроку набором символов. В данном случае мы заменяем подстроку "ies" длиной в 3 символа единичным символом 'y'. (Имеется десять перегруженных вариантов функции replace(). В следующем разделе мы коснемся остальных вариантов.)

Если слово заканчивается на "ses", как promises или purposes, нужно удалить суффикс "es"[16]:

string ses( "ses" );

if ( ! word.compare( pos3, 3, ses )) {

    word.erase( pos3+l, 2 );

    return;

}

Если слово кончается на "ous", как oblivious, fulvous, cretaceous, или на "is", как genesis, mimesis, hepatitis, мы не будем изменять его. (Наша система несовершенна. Например, в слове kiwis надо убрать последнее 's'.) Пропустим и слова, оканчивающиеся на "ius" (genius) или на "ss" (hiss, lateness, less). Нам поможет вторая форма функции compare():




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