模板生成系统

一、解法一(90分)

一定要注意以下几个函数应该传的参数是什么:

1.substr(pos,length);
2.erase(pos,length);
#include<bits/stdc++.h>

using namespace std;

const int N = 105;

struct node {
    string name;
    string value;
}a[N];

string str[N];

int main() {
    int n,m;
    cin>>m>>n;
    getchar();
    for(int i=0;i<m;i++) {
        getline(cin,str[i]);
    }
    for(int i=0;i<n;i++) {
        string na,v;
        cin>>na;
        getchar();
        getline(cin,v);
        a[i].name=na;
        a[i].value=v.substr(1,v.size()-2);
    }
    for(int i=0;i<m;i++) {
        int pos1=0,pos2=0;
        while(pos1>=0&&pos2>=0) {
            pos1 = str[i].find("{{ ");
            pos2 = str[i].find(" }}");
            for(int j=0;j<str[i].size();j++) {
                
            }
            if(pos1>=0&&pos2>=0) {
                string ss = str[i].substr(pos1+3,pos2-pos1-3);
                str[i].erase(pos1,pos2-pos1+3);
                for(int j=0;j<n;j++) {
                    if(ss == a[j].name) {
                    str[i].insert(pos1,a[j].value);
                    break;
                    }
                }
            }
        }
    }
    for(int i=0;i<m;i++) {
        cout<<str[i]<<endl;
    }
    return 0;
}

二、解法二(100分)

#include<bits/stdc++.h>

using namespace std;

const int N = 110;

int n,m;
string str[N];
unordered_map<string,string> vars;

int main() {
    cin>>m>>n;
    getchar();
    for(int i=0;i<m;i++) {
        getline(cin,str[i]);
    }
    for(int j=0;j<n;j++) {
        string name,value;
        cin>>name;
        getchar();
        getline(cin,value);
        value = value.substr(1,value.size()-2);
        vars[name]=value;
    }
    for(int i=0;i<m;i++) {
        for(int j=0;j<str[i].size();) {
            if(j+1<=str[i].size()&&str[i][j]=='{'&&str[i][j+1]=='{') {
               int k = j+3;
               string na;
               while(str[i][k]!=' '||str[i][k+1]!='}'||str[i][k+2]!='}') {
                   na=na+str[i][k];
                   k++;
               }
               cout<<vars[na];
               j=k+3;
            }
            else {
                cout<<str[i][j++];
            }
        }
        cout<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值