原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1804
有中文意思的:http://acm.bnu.edu.cn/v3/problem_show.php?pid=1010
分析:
用STL中map容器,map<string,string>记录特殊单词的变换,map<string,int> 标记特殊单词是否存在。
我的代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<map>
using namespace std;
map<string, string> mymap;
map<string, int> fmap;
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
mymap.clear();
fmap.clear();
for(int i=1;i<=n;i++)
{
string s1,s2;
cin>>s1>>s2;
fmap[s1]=1;
mymap[s1]=s2;
}
for(int i=1;i<=m;i++)
{
string s;
cin>>s;
if(fmap[s])
{
cout<<mymap[s]<<endl;
}
else
{
int len=s.length()-1;
if(s[len]=='y'&&(s[len-1]!='a'&& s[len-1]!='e'&&s[len-1]!='i'&&s[len-1]!='o'&&s[len-1]!='u'))
{
s[len]='i';
s+="es";
}
else if(s[len]=='o'||s[len]=='s'||s[len]=='x')
{
s+="es";
}
else if(s[len]=='h'&&(s[len-1]=='c'||s[len-1]=='s'))
{
s+="es";
}
else
{
s+='s';
}
cout<<s<<endl;
}
}
}
return 0;
}
总结:c++中string类,和map容器的使用。