问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的。例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是 输入格式 输入的第一行包含两个整数 m, n,分别表示模板的行数和模板生成时给出的变量个数。 输出格式 输出包含若干行,表示模板生成的结果。 样例输入 11 2 样例输出 <!DOCTYPE html> 评测用例规模与约定 0 ≤ m ≤ 100 |
最终运行结果90分,超时。第二次90分超时情况,看大多都用字符数组,string会更费时吗?
#include<iostream>
#include<string>
#include <cctype>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <cmath>
using namespace std;
map<string,string> m;
vector<string> v;
int main()
{
int n,mm;
cin>>n>>mm;
string s;
cin.get();
for(int i=0;i<n;++i)
{
getline(cin,s);
v.push_back(s);
}
string a,b,c;
for(int i=0;i<mm;++i)
{
cin>>a;
getline(cin,b);
for(int i=0;i<b.size();++i)
{
if(b[i]!='"')
{
b.erase(b.begin());
--i;
}
else
{
b.erase(b.begin());
break;
}
}
for(int i=b.size()-1;i>=0;--i)
{
if(b[i]!='"')
{
b.erase(b.begin()+i);
}
else
{
b.erase(b.begin()+i);
break;
}
}
m[a]=b;
}
int last;
string sleft="{{ ";
string sright=" }}";
for(int i=0;i<n;++i)
{
int kleft=v[i].find(sleft);
while(kleft>=0)
{
int kright=v[i].find(sright);
if(kright>kleft)
{
string sss(v[i],kleft+3,kright-kleft-3);
v[i].erase(kleft,sss.size()+6);
if(m.find(sss)!=m.end())
v[i].insert(kleft,m[sss]);
}
kleft=v[i].find(sleft);
}
}
for(int i=0;i<n;++i)
cout<<v[i]<<endl;
return 0;
}