CCF 201509-3 模板生成系统

来源:互联网 发布:新百伦淘宝官方旗舰店 编辑:程序博客网 时间:2024/05/17 23:16

代码只有90分,说是超时,大概在字符串循环查找{{的时候会出现超时的问题,解决方案是改成字符串+拼接 太麻烦就不改了

总之用字符串就是很容易超时

还有 不要用fflush(stdin) ccf系统里一定出错,要用就用getchar()

#include<iostream>#include<cstring>#include<vector>#include<cmath>using namespace std;struct mde{string var;string key;};vector<mde> modes;string checkin(string tocheck){int ifin=0;string toreturn;for(int i=0;i<modes.size();i++){if(strcmp(tocheck.c_str(),modes[i].var.c_str())==0){ifin=1;toreturn=modes[i].key;break;}}if(ifin==1) return toreturn;return "";}int main(){int line,numofarg;cin>>line>>numofarg;getchar();//输入数字之后就要加getchar以保证不会影响到下一个字符串接收 string mode[101];for(int i=0;i<line;i++){getline(cin,mode[i]);}//fflush(stdin);string args[101];for(int i=0;i<numofarg;i++){getline(cin,args[i]);}mde X;for(int i=0;i<numofarg;i++){int lft=args[i].find("\"");//cout<<lft<<endl;int rht=args[i].rfind("\"");string k=args[i].substr(lft+1,rht-lft-1);string v=args[i].substr(0,lft-1);//cout<<v<<endl;//cout<<k<<endl;X.var=v;X.key=k;modes.push_back(X);}// mode[i] 输入的每一行   modes 存储键值对  string haha="{{ ";for(int i=0;i<line;i++){int left,right;string temp;while(strstr(mode[i].c_str(),haha.c_str())!=NULL){//说明有要替换的东西,替换之 left=mode[i].find("{{ ");right=mode[i].find("}}",left);temp=mode[i].substr(left+3,right-left-4); //截取var值 string a=checkin(temp);    mode[i]=mode[i].replace(left,right-left+2,a);//else{//mode[i]=mode[i].replace(left,right-left+2,"");//}}}for(int i=0;i<line;i++)cout<<mode[i]<<endl;return 0;}

0 0
原创粉丝点击