HDU 1804 Deli Deli


标题链接:Click here~~
水水の文字列処理.主にmapの使い方を練習します.
しかし、この問題は、中学校で英語を勉強したばかりの頃、いろいろな懐かしさを思い出しました.
タイトル:
単語の複数形を出力します.特殊な変換があるので、事前にあげます.その他はルールに従って変換します.
問題解決の考え方:
特殊変換はmapで保存し,その他の直接シミュレーションを行う.
#include <map>
#include <string>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
bool fuyin(char c)
{
	return c-'a' && c-'e' && c-'i' && c-'o' && c-'u';
}
bool ES(char d,char c)
{
	return c=='o' || c=='s' || c=='x' || (c=='h'&&(d=='c'||d=='s'));
}
int main()
{
	int n,m,l;
	char a[25],b[25];
	string A,B;
	map<string,string> M;
	map<string,string>::iterator it;
	while(~scanf("%d%d",&m,&n))
	{
		while(m--)
		{
			scanf("%s%s",a,b);
			M[a] = b;
		}
		while(n--)
		{
			scanf("%s",a);
			it = M.find(a);
			if(it != M.end())
				cout<< (*it).second <<endl;
			else
			{
				l = strlen(a);
				if(fuyin(a[l-2]) && a[l-1]=='y')
				{
					a[l-1]='i';
					strcat(a,"es");
				}
				else if(ES(a[l-2],a[l-1]))
					strcat(a,"es");
				else
					strcat(a,"s");
				puts(a);
			}
		}
		M.clear();
	}
	return 0;
}