B3927 [GESP202312 四级] 小杨的字典 题解
Virtual_Character · · 题解
考虑使用 map 来做。
思路很简单,先录入词典条目,再输入字符串 UNK。
查找单词是否存在可以用 find() 函数,find(key) 为返回键是
代码:
#include<iostream>
#include<map>
using namespace std;
int main(){B3927
int n;
map<string,string> dic;//dictionary
string a,b,s,tmp;
map<string,string>::iterator it;//定义迭代器
cin>>n;
while(n--){
cin>>a>>b;
dic[a]=b;
}
cin>>s;
for(int i=0;i<s.length();i++){
if(s[i]>=97&&s[i]<=122){//是否为字母
tmp+=s[i];//将当前字符加入tmp
}else{//是标点符号
//对单词进行处理
if(!tmp.empty()){//如果tmp中有字符
it=dic.find(tmp);//查找
if(it==dic.end()){//无
cout<<"UNK";
}else{//有
cout<<it->second;//map可以使用it->first来访问键,使用it->second访问值
}
tmp="";//清空tmp
}
cout<<s[i];//输出标点符号
}
}
if(!tmp.empty()){//由于末尾没有标点符号,再处理一次
it=dic.find(tmp);
if(it==dic.end()){
cout<<"UNK";
}else{
cout<<it->second;
}
}
return 0;
}