这题考的就是字符串的操作,不用stl也可以做,但会比较麻烦。
写了一个用了string和vector< pair<string,string> >的90分版本,最后一个用例是运行超时。不知道是stl的操作耗费太多时间还是算法逻辑上有疏漏。
这里先放上90分版本,以后有时间再修正
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
string get_key(vector< pair<string, string> > key, string target);
int main()
{
vector<string> model;
vector< pair<string, string> > key;
int m, n;
cin >> m >> n;
getchar();
model.resize(m);
int l = 0;
while (m--)
{
string temp;
getline(cin, temp);
model[l++] = temp;
}
key.resize(n);
l = 0;
while (n--)
{
string temp0;
string temp1;
cin >> temp0;
getchar();
getline(cin, temp1);
int label;
while ((label = temp1.find("\"")) != -1)
{
temp1.erase(label, 1);
}
key[l].first += temp0;
key[l++].second += temp1;
}
for (size_t i = 0; i < model.size(); i++)
{
int label;
while ((label = model[i].find("{{")) != -1)
{
int label_end = model[i].find("}");
label_end += 2;
int label_temp = label + 3;
string temp0 = "";
string temp1;
while (model[i][label_temp] != ' ')
{
temp0 += model[i][label_temp];
label_temp++;
}
temp1 = get_key(key,temp0);
model[i].erase(label + model[i].begin(), label_end + model[i].begin());
model[i].insert(label, temp1);
}
}
for (size_t i = 0; i < model.size(); i++)
{
cout << model[i] << endl;
}
getchar();
getchar();
}
string get_key(vector< pair<string, string> > key, string target)
{
for (int i = 0; i < key.size(); i++)
{
if (key[i].first == target)
{
return key[i].second;
}
}
return "";
}