一、解法一(90分)
一定要注意以下几个函数应该传的参数是什么:
1.substr(pos,length);
2.erase(pos,length);
#include<bits/stdc++.h>
using namespace std;
const int N = 105;
struct node {
string name;
string value;
}a[N];
string str[N];
int main() {
int n,m;
cin>>m>>n;
getchar();
for(int i=0;i<m;i++) {
getline(cin,str[i]);
}
for(int i=0;i<n;i++) {
string na,v;
cin>>na;
getchar();
getline(cin,v);
a[i].name=na;
a[i].value=v.substr(1,v.size()-2);
}
for(int i=0;i<m;i++) {
int pos1=0,pos2=0;
while(pos1>=0&&pos2>=0) {
pos1 = str[i].find("{{ ");
pos2 = str[i].find(" }}");
for(int j=0;j<str[i].size();j++) {
}
if(pos1>=0&&pos2>=0) {
string ss = str[i].substr(pos1+3,pos2-pos1-3);
str[i].erase(pos1,pos2-pos1+3);
for(int j=0;j<n;j++) {
if(ss == a[j].name) {
str[i].insert(pos1,a[j].value);
break;
}
}
}
}
}
for(int i=0;i<m;i++) {
cout<<str[i]<<endl;
}
return 0;
}
二、解法二(100分)
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int n,m;
string str[N];
unordered_map<string,string> vars;
int main() {
cin>>m>>n;
getchar();
for(int i=0;i<m;i++) {
getline(cin,str[i]);
}
for(int j=0;j<n;j++) {
string name,value;
cin>>name;
getchar();
getline(cin,value);
value = value.substr(1,value.size()-2);
vars[name]=value;
}
for(int i=0;i<m;i++) {
for(int j=0;j<str[i].size();) {
if(j+1<=str[i].size()&&str[i][j]=='{'&&str[i][j+1]=='{') {
int k = j+3;
string na;
while(str[i][k]!=' '||str[i][k+1]!='}'||str[i][k+2]!='}') {
na=na+str[i][k];
k++;
}
cout<<vars[na];
j=k+3;
}
else {
cout<<str[i][j++];
}
}
cout<<endl;
}
return 0;
}