思路:
1. 就字符串的查找替换,注意找好每次截断的字符串长度就好了。截错的话多试几次就好了。
2. 用map<string, string>来放键值对
代码如下:
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
int main()
{
//freopen("model.txt", "r", stdin);
int m, n;
vector<string> modules; //放 m 条待处理字符串行
map<string, string> keyvalues; //放 n 个键值对
cin >> m >> n;
cin.get();
for(int i = 0; i < m; i ++)
{
string line;
getline(cin, line);
modules.push_back(line);
}
for(int i = 0; i < n; i++)
{
string line, key;
getline(cin, line);
key = line.substr(0, line.find_first_of(' ')); //找出键
line.erase(0, key.length()+2);
line.erase(line.length() - 1); //截出值
keyvalues[key] = line;
//cout << key << " " << line << "***" << endl;
}
for(int i = 0; i < modules.size(); i++)
{
string line = modules[i];
int pos = -1;
//用 while 循环把值替换为键
while((pos = modules[i].find("{{ ", pos+1)) != string::npos)
{
int endpos = modules[i].find(" }}", pos+1) + 3;
string key = modules[i].substr(pos+3, endpos - pos - 6);
modules[i].replace(pos, endpos - pos, keyvalues[key]);
}
}
for(int i = 0; i < modules.size(); i++)
cout << modules[i] << endl;
return 0;
}