水题一枚。

题目大意:按照题目要求将所给单词转化为复数形式。

View Code
 1 #include <iostream>
 2 #include <map>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     map<string, string>M;
10     map<char, int>S;
11     int l,n;
12     S['a'] = 1, S['e'] = 1;
13     S['i'] = 1, S['o'] = 1, S['u'] = 1;
14     string s[102];
15     string a, b;
16     while (cin >> l >> n)
17     {
18           M.clear();
19           while (l--)
20           {
21                 cin >> a >> b;
22                 M[a] = b;
23           }
24           for (int i = 0;i < n;i++)
25           {
26                 cin >> s[i];
27                 if (M.find(s[i]) != M.end()) s[i] = M[s[i]];
28                 else
29                 {
30                     int len = s[i].length();
31                     switch (s[i][len - 1])
32                     {
33                        case 'y': if (len > 1 && (S.find(s[i][len - 2])) == S.end()) s[i][len - 1] = 'i', s[i] += "es";
34                                  else s[i] += "s";break;
35                        case 'o':
36                        case 's':
37                        case 'x':s[i] += "es";break;
38                        case 'h': if (len > 1 && (s[i][len - 2] == 'c' || s[i][len - 2] == 's'))
39                                     s[i] += "es";
40                                  else s[i] += "s";break;
41                        default:s[i] += "s";break;
42                     }
43                 }
44           }
45           for (int i = 0;i < n;i++) cout << s[i] << endl;
46     }
47     return 0;
48 }