Матч 302, Преобразование существительного (NounReform)

Дивизион 2, Уровень 1

 

Для преобразования имени существительного из единственного во множественное число в английском языке пользуются следующими общими правилами:

1. Если слово оканчивается на 's', 'z', 'x', 'ch' или 'sh', то к слову приписывают ‘es’;

2. Если слово оканчивается на 'ay', 'ey', 'iy', 'oy' или 'uy', то к слову приписывают ‘s’;

3. Если слово оканчивается на 'y', но не удовлетворяет ни одному из случаев пункта 2, то 'y' заменяется на 'ies'.

4. Во всех остальных случаях к слову добавляется ‘s’.

Преобразовать заданные слова (имена существительные) во множественное число.

 

Класс: NounReform

Метод: vector<string> makePlural(vector<string> nouns)

Ограничения: массив nouns содержит до 20 строк, каждая строка nouns[i] содержит от 1 до 20 букв ‘a’ – ‘z’.

 

Вход. Массив строк имен существительных nouns в единственном числе.

 

Выход. Массив строк имен существительных во множественном числе.

 

Пример входа

nouns

{“box", "church", "elephant", "stereo"}

{“tray", "key", "enemy", "baby"}

{"a", "s", "oy", "y", "yy”}

 

Пример выхода

{“boxes", "churches", "elephants", "stereos"}

{“trays", "keys", "enemies", "babies"}

{“as", "ses", "oys", "ies", "yies"}

 

 

 

РЕШЕНИЕ

обработка строк

 

Для каждого имени существительного следует произвести описанные преобразования. Реализуем каждое из описанных правил преобразования условным оператором, сравнивая последние буквы слов.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

#include <string>

using namespace std;

 

class NounReform

{

public:

  vector<string> makePlural(vector<string> nouns)

  {

    int i, len;

    for(i = 0; i < nouns.size(); i++)

    {

      len = nouns[i].size() - 1;

      if ((nouns[i][len] == 's') || (nouns[i][len] == 'z') ||

          (nouns[i][len] == 'x') ||

         ((nouns[i][len-1] == 'c') && (nouns[i][len] == 'h'))||

         ((nouns[i][len-1] == 's') && (nouns[i][len] == 'h')))

         nouns[i] += "es"; else

      if ((nouns[i][len] == 'y') && ((nouns[i][len-1] == 'a')) ||

          (nouns[i][len-1] == 'e') ||

          (nouns[i][len-1] == 'i') || (nouns[i][len-1] == 'o') ||

          (nouns[i][len-1] == 'u')) nouns[i] += "s"; else

      if (nouns[i][len] == 'y')

      {

        nouns[i].erase(nouns[i].end()-1);

        nouns[i] += "ies";

       }

      else nouns[i] += "s";

    }

    return nouns;

  }

};