UVA 11233 - Deli Deli
題目:
Deli太太經營著熟食店"Deli Deli"。
就在去年,Deli太太決定擴大她的業務,建立在線商店,並且聘請了一位工程師負責線上商店。
最近,她的新的客戶一直抱怨電子帳單有錯誤。工程師忘記顧客購買多項商品時,商品需要使用複數形式。
不幸的是Deli太太聘請的工程師正在休假,因此你的任務是為Deli太太實現此功能。
以下為複數形式的輸出說明:
若單字的複數形態屬於沒有規則的類型,請從表格輸出對應的複數型(表格會事先給定)。
否則,若單字以子音字母接"y"結尾,請以"ies"取代"y"。
否則,若單字以"o", "s", "ch", "sh", "x"結尾,請在字尾多加上"es"。
否則,請直接在字尾加上"s"。
Input
輸入的第一行包含兩個整數L和N(0 ≤ L ≤ 20、1 ≤ N ≤ 100)
接下來L行包含對不規則單詞的描述及其複數形式。
每行包含兩個用空格字符分隔的單詞,其中第一個單詞為單數,第二個單詞為複數。
在不規則單詞列表之後,接下來N行,每行包含一個單詞。
每個單詞最多包含20個小寫字母[a-z]。
Output
對於每行單詞,輸出單詞的複數形式。
Sample Input #1
3 7
rice rice
spaghetti spaghetti
octopus octopi
rice
lobster
spaghetti
strawberry
octopus
peach
turkey
Sample Output #1
rice
lobsters
spaghetti
strawberries
octopi
peaches
turkeys
C++ code:
```c++=
#include <bits/stdc++.h>
#define spd ios::sync_with_stdio(0);cin.tie(0);
#define ll long long int
using namespace std;
int main() {
int a, b;
cin >> a >> b;
vector<string> m(a * 2), n(b);
for (int i = 0; i < a * 2; ++i) {
cin >> m[i];
}
for (int i = 0; i < b; ++i) {
cin >> n[i];
}
for (int i = 0; i < b; ++i) {
auto it = find(m.begin(), m.end(), n[i]);
if (it != m.end()) {
int index = distance(m.begin(), it);
cout << m[index + 1] << endl;
}
else {
string t = n[i];
int len = t.length();
if (t.back() == 'y' && (t[len - 2] != 'a' && t[len - 2] != 'e' && t[len - 2] != 'i' && t[len - 2] != 'o' && t[len - 2] != 'u')) {
t.pop_back();
t += "ies";
}
else if (t.back() == 'o' || t.back() == 's' || t.back() == 'x') {
t += "es";
}
else if (t.substr(len - 2) == "ch" || t.substr(len - 2) == "sh") {
t += "es";
}
else {
t += "s";
}
cout << t << endl;
}
}
return 0;
}
```