【ccf-csp题解】第5次csp认证-第三题-模板生成系统-字符串模拟

题目描述

【ccf-csp题解】第5次csp认证-第三题-模板生成系统-字符串模拟_第1张图片【ccf-csp题解】第5次csp认证-第三题-模板生成系统-字符串模拟_第2张图片【ccf-csp题解】第5次csp认证-第三题-模板生成系统-字符串模拟_第3张图片【ccf-csp题解】第5次csp认证-第三题-模板生成系统-字符串模拟_第4张图片

思路分析

这个是一个简单的字符串模拟题,但蕴藏了一些细节值得挖掘,故写于博客之中进行记录。

第一、关于数据的读入

对于前m行,直接使用getline函数进行读入即可,注意在读取完m和n之后,要写一个getchar()吸收回车

对于接下来的n行,需要读入两个内容,第一是变量名,第二是变量值,由于变量名和变量值之间有空格,所以对于变量名的读取直接使用cin即可,对于变量值,由于要读取的内容在双引号之间,所以可以使用如下技巧读取(来自y总网课)

 string key, value;
 cin >> key;
 char c;
 while (c = getchar(), c != '\"');
 while (c = getchar(), c != '\"') value += c;
 vars[key] = value;

第二、如何替换

我自己写的代码是用了一堆string自带的函数,包括replace、substr和find

最后在csp网站上提交是90分,显示超时,可能是写的太暴力导致的

90分代码放下面,大家看个乐子就好

#include
#include
#include
#include
using namespace std;
int m,n;
vectoralls;
mapget_value;
int main()
{
    scanf("%d%d",&m,&n);
    getchar();
    for(int i=1;i<=m;i++)
    {
        string temp;
        getline(cin,temp);
        alls.push_back(temp);
    }
    for(int i=1;i<=n;i++)
    {
        string temp;
        getline(cin,temp);
        int index=temp.find(' ');
        string sub1=temp.substr(0,index);
        string sub2=temp.substr(index+2,temp.length()-index-3);
        get_value[sub1]=sub2;
    }
    for(int i=0;i

y总一百分代码

#include
#include
#include
#include
using namespace std;
vectorstrs;
unordered_mapvals;
int n,m;
int main()
{
    cin>>m>>n;
    getchar();
    while(m--)
    {
        string str;
        getline(cin,str);
        strs.push_back(str);
    }
    while(n--)
    {
        string key,value;
        char c;
        cin>>key;
        while(c=getchar(),c!='\"');
        while(c=getchar(),c!='\"')value+=c;
        vals[key]=value;
    }
    for(auto &str:strs)
    {
        for(int i=0;i

你可能感兴趣的:(CCF-CSP,算法综合,算法,c++,ccf-csp)