CCF-201509-3
让我们先来看一下题目
解题思路
1.替换的字符用map存储;
2.提取字符用到了substr;
3.替换用到了replace,find等函数;
注意点
1.substr的第一个参数是提取字符串的首字母下标i,第二个参数是字符串长度,一般位尾减首+1,题目中next为尾+1;
2.find可以不加第二个参数,加了就是从第二参数下标开始找;
3.replace,个人感觉这个函数吊炸天。。。不多说;
4.getline前要用ignore或者getchar干掉换行。
代码
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
const int maxn=100;
string str[maxn];
map<string,string> stand;
int main(){
int m,n;
cin>>m>>n;
cin.ignore();
for(int i=0;i<m;i++){
getline(cin,str[i]);
}
while(n--){
string a,b;
cin>>a;
getline(cin,b);
stand[a]=b.substr(2,b.length()-3);
}
for(int i=0;i<m;i++){
int prev=0,next;
while(1){
string temp;
if((prev=str[i].find("{{ ",prev))==str[i].npos) break;
if((next=str[i].find(" }}",prev))==str[i].npos) break;
temp=str[i].substr(prev+3,next-prev-3);
str[i].replace(str[i].begin()+prev,str[i].begin()+next+3,stand.count(temp)?stand[temp]:"");
prev+=stand.count(temp)?stand[temp].length():0;
}
}
for(int i=0;i<m;i++){
cout<<str[i]<<endl;
}
return 0;
}