字符串匹配
#include <iostream>
#include <map>
#include <string>
using namespace std;
map<char,string>mp1;
map<string,string>mp2;
int main()
{
char s;
string str;
while(cin>>s&&s!='*')
{
cin>>str;
mp1[s]=str;
}
while(cin>>str&&str!="*")
{
string st="";
for(int i=0;i<str.size();i++)
{
st+=mp1[str[i]];
}
mp2[str]=st;
}
while(cin>>str&&str!="*")
{
int cont=0;
map<string,string>::iterator it;
string ans="";
for(it=mp2.begin();it!=mp2.end();it++)
{
if(str==it->second)
{
if(cont==0)
ans=it->first;
cont++;
}
}
if(cont==1)
{
cout<<ans<<endl;
continue;
}
else if(cont>1)
{
ans+='!';
cout<<ans<<endl;
}
else
{
double max=1e90;
string ans="";
int fg2=0;
for(it=mp2.begin();it!=mp2.end();it++)
{
int i;
int fg=0;
for(i=0;i<str.size();i++)
{
if((it->second)[i]!=str[i])
{
break;
}
else
{
fg=1;
}
}
if(fg==1)
{
if(i==str.size())
{
int num12=(it->second).size()-str.size();
if(num12<max)
{
fg2=1;
max=num12;
ans.clear();
ans=it->first;
}
}
else
{
if(i==(it->second).size())
{
int num12=str.size()-(it->second).size();
if(num12<max)
{
fg2=1;
max=num12;
ans.clear();
ans=it->first;
}
}
}
}
}
if(!fg2)
{
it=mp2.begin();
cout<<it->first<<endl;
}
else
{
ans+="?";
cout<<ans<<endl;
}
}
}
return 0;
}