#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
//若两个字符串存在包含关系,返回两串长度差;否则返回-1;
int compare(string s1,string s2)
{
string s;
if(s1.length()>s2.length()){
s=s1;
s1=s2;
s2=s;
}
int i,flag=1;
for(i=0;i<s1.length();i++){
if(s1[i]!=s2[i]){
flag=0;
break;
}
}
return flag?s2.length()-s1.length():-1;
}
int main()
{
//freopen("input.txt","r",stdin);
int i,j;
char ch[50],c;
string table[50],context[100],translate[100],s;
int num1=0,num2=0;
while(cin>>c){
if(c=='*')
break;
ch[num1]=c;
cin>>table[num1];
num1++;
}
while(cin>>s){
if(s=="*")
break;
context[num2]=s;
for(i=0;i<s.length();i++){
for(j=0;j<num1;j++){
if(s[i]==ch[j]){
if(i==0)
translate[num2]=table[j];
else
translate[num2]+=table[j];
break;
}
}
}
num2++;
}
while(cin>>s){
if(s=="*")
break;
int count=0,first=0;
//遍历判断是否有精确匹配
for(i=0;i<num2;i++){
if(s==translate[i]){
count++;
if(count==1)
first=i;
}
}
if(count){
cout<<context[first];
if(count>1)
cout<<'!';
cout<<endl;
}
//若没有精确匹配,找到最小误差匹配
else{
int k=100;
for(i=0;i<num2;i++){
if(compare(translate[i],s)>0&&compare(translate[i],s)<k){
k=compare(translate[i],s);
first=i;
}
}
cout<<context[first]<<'?'<<endl;
}
}
return 0;
}
UVA - 508 Morse Mismatches
最新推荐文章于 2020-02-11 22:00:54 发布