map<string,string>m;
#include <bits/stdc++.h>
using namespace std;
int main()
{string s1;cin>>s1;map<string,string>m;while(cin>>s1&&s1!="END"){string s2;cin>>s2;m[s2]=s1;}cin>>s1;cin.ignore();string s;while(getline(cin,s)&&s!="END"){string w="";for(int i=0;i<s.size();i++){if(s[i]>='a'&&s[i]<='z'){w+=s[i];}else{if(w.empty()) cout<<s[i];else {if(m.count(w)) w=m[w];cout<<w;cout<<s[i];w="";}}}cout<<endl;}
}
while的死循环
只有上面一种,尝试跳出的写法但应该写不出来
#include <bits/stdc++.h>
using namespace std;
int main()
{string s1;cin>>s1;map<string,string>m;while(cin>>s1&&s1!="END"){string s2;cin>>s2;m[s2]=s1;}cin>>s1;cin.ignore();string s;while(getline(cin,s)&&s!="END"){string w="";for(int i=0;i<s.size();i++){while(1)//这里i的值肯定不会发生变化是死循环没有输出的{if(s[i]<'a'||s[i]>'z') break;else w+=s[i];}if(w.empty()) {cout<<s[i];continue;}if(m.count(w)) w=m[w];cout<<w;cout<<s[i];w="";}cout<<endl;}
}
如果结尾不是标点的话
因为只有不是才会跳出,所以如果结尾也是单词我们的w只是增加没有机会跳出来判断了
#include <bits/stdc++.h>
using namespace std;
int main()
{string s1;cin>>s1;map<string,string>m;while(cin>>s1&&s1!="END"){string s2;cin>>s2;m[s2]=s1;}cin>>s1;cin.ignore();string s;while(getline(cin,s)&&s!="END"){string w="";for(int i=0;i<s.size();i++){if(s[i]>='a'&&s[i]<='z'){w+=s[i];}else{if(w.empty()) cout<<s[i];else {if(m.count(w)) w=m[w];cout<<w;cout<<s[i];w="";}}}if(!w.empty())//行末的单词处理{if(m.count(w)) w=m[w];cout<<w;//这里就不用初始化,s[i]了 }cout<<endl;}
}