201509-3-模板生成系统

来源:互联网 发布:台湾电视直播软件 编辑:程序博客网 时间:2024/06/06 17:26

(http://115.28.138.223/view.page?gpid=T30)

#include<iostream>using namespace std;#include<string.h>#define maxn 0x7fffffff#include<map>#include<stdio.h>int m,n;int main(){    int i,j;    string s[105];    string s1,s2,s3,s4;    cin>>n>>m;    getchar();    for(i=0;i<n;i++)        getline(cin,s[i]);    map<string,string>v;     for(j=0;j<m;j++)    {          int k,k1=0;        cin>>s1;        getchar();        getline(cin,s2);        s1.insert(0,"{{ ");        s1=s1+" }}";        s2.erase(0,1);        s2.erase(s2.end()-1,s2.end());        v[s1]=s2;    }    int j1[20],j2[20],k,k1;    for(i=0;i<n;i++)    {             k1=0;        memset(j1,-1,sizeof(j1));        memset(j2,-1,sizeof(j2));        for(j=0;s[i][j]!=0;j++)        {            if(s[i][j]=='{'&&s[i][j+1]=='{')                j1[k1]=j;            if(s[i][j]=='}'&&s[i][j+1]=='}')                j2[k1]=j+1;            if(j1[k1]!=-1&&j2[k1]!=-1)                k1++;        }        int t=0;        for(j=0;j<k1;j++)        {              s3="";            for(k=j1[j]+t;k<=j2[j]+t;k++)                s3.insert(s3.end(),s[i][k]);            if(v.count(s3))            {                s[i].replace(s[i].begin()+j1[j]+t,s[i].begin()+j2[j]+1+t,v[s3]);                t=t+v[s3].size()-s3.size();//注意替代后字符串的长度发生改变,t为变化的长度。            }            else            {                s[i].replace(s[i].begin()+j1[j]+t,s[i].begin()+j2[j]+1+t,"");                t=t-s3.size();            }        }        cout<<s[i]<<endl;    }    return 0;}
0 0