CCF 201509-3 模板生成系统 100分
Posted 登登登ccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF 201509-3 模板生成系统 100分相关的知识,希望对你有一定的参考价值。
题目来源:- 计算机软件能力认证考试系统
#include<bits/stdc++.h>
using namespace std;
int main() {
int m,n;
cin>>m>>n;
getchar(); //处理换行符
string tmp;
vector<string> v; //存储每行的字符串
for(int i=0; i<m; i++) {
getline(cin,tmp);
v.push_back(tmp);
}
string key,value;
map<string,string> dict; //存储替代的键值字符串
for(int i=0; i<n; i++) {
cin>>key;
getline(cin,value);
dict[key]=value.substr(2,value.size()-3); //字符串截取
}
for(int i=0; i<m; i++) {
int pre=0,next=0;
while(1) {
if((pre=v[i].find("{{ ",pre)) == (int)string::npos) //从pre之后开始扫描,防止时间超限
break; //找不到匹配的字符就结束循环,直接输出
if((next=v[i].find(" }}",pre)) == (int)string::npos)
break;
key=v[i].substr(pre+3,next-pre-3); //第一个参数为起始位置,第二个参数为串的长度
v[i].replace(pre,next-pre+3,dict.count(key)?dict[key]:""); //如果发现dict中没有对应的键,就替换为空串
pre+=dict.count(key)?dict[key].size():0; //pre加上替代后字符串的长度,防止重复扫描
}
cout<<v[i]<<endl;
}
return 0;
}
以上是关于CCF 201509-3 模板生成系统 100分的主要内容,如果未能解决你的问题,请参考以下文章