首页 > 技术文章 > P1953 易语言

lyc-lb-blogs 2021-08-10 17:19 原文

易语言

题目描述

老师近段时间正在研究易语言,这是一款windows下的可视化编程系统,由大连大有吴涛软件开发公司开发的、具有中国知识产权的系统。为了更好地学习该套系统,老师总是有意识地在实践中运用这套系统来开发程序。 这不,今天老师碰到了一个问题,那就是“当把数据放置到KOJ上去时,需要把测试数据改成相应的文件名”。举个例子说,如果原始测试数据文件名是e0.in,e1.in…e9.in和e0.out,e1.out…e9.out,则老师需要把文件全部改为data1.in,data2.in…data10.in和data1.out,data2.out…data10.out。程序界面如下图所示: 当然了,老师是编程的菜鸟,比起你可是差多了,所以他的程序不是很好,现在想请你帮老师改进这个程序。 事先,老师会告诉你所需要生成的目标文件名格式,比如,他告诉你“enger0.in”和“ans”,则表示目标文件中输入文件的主名是enger,扩展名是in,编号从0开始而且跟在主名后面,当然了,输出文件名就依次是enger0.ans,enger1.ans……engerx.ans,其中的x你可以统计老师告诉你的原始文件名的个数来确定。另外,老师也会告诉你原始的所有输入数据的文件名全称,比如“a1.txt,a2.txt……ax.txt”。但老师是一个粗心的人,你不要期望老师给你的文件名是按照编号从小到大给出的,但给出的文件名肯定是正确的而且满足一般输入输出文件名的规律的(编号数字肯定出现在文件主名末尾或者扩展名末尾,而且除了这个编号数字外,在原始文件名和生成的目标文件名其他的任何地方都不会出现数字)。 有些原始的输入输出文件名并不需要改变主名和扩展名,而只需改变文件编号即可,此时,老师首先会告诉你一个数字1(或者0),表示最终生成的目标文件的主名和扩展名不必改变,而只需把编号改为从1(或者0)开始即可。

输入输出格式

输入格式

 

输入文件e.in第一行有两种情况,第一种情况是两个用一个空格分隔的字符串,分别表示最终生成的目标文件名的格式(第一个表示生成的目标文件中的第一个输入文件的名字),第二种情况是只有一个数字1(或者0),表示文件名主名和扩展名不必更改,只需修改成从1(或者0)开始编号的文件名即可。输入文件下面还有n行(1<=n<=100000),每行两个用一个空格分隔的字符串,分别表示原始输入和输出文件的文件名(对于输入和输出文件中所有文件名的主名和扩展名都不超过10个字符,而且文件的最大编号不会超过200000)。

输出格式

 

输出文件e.ans包含n行,每行两个用一个空格分隔的字符串,分别表示最终生成的目标文件的文件名。第一个表示输入文件,第二个表示输出文件。按照编号从小到大输出。

输入输出样例

输入样例 #1

enger0.in ans
abc1.in abc1.out
abc2.in abc2.out
abc3.in abc3.out
abc4.in abc4.out

输出样例 #1

enger0.in enger0.ans
enger1.in enger1.ans
enger2.in enger2.ans
enger3.in enger3.ans

输入样例 #2

1
aa.in0 aa.ou0
aa.in1 aa.ou1
aa.in2 aa.ou2

输出样例 #2

aa.in1 aa.ou1
aa.in2 aa.ou2
aa.in3 aa.ou3


模拟神(水)题,比较扣细节,不过也没看出来题目和易语言有什么关系

题目大意:写一个文本替换机,支持修改输入文件的文件名,序号,后缀名

注意

编号数字肯定出现在文件主名末尾或者扩展名末尾

要特判一下, 还有就是文件序号严格遵循读入

没有什么性能要求,保证正确性就行

 



#include <bits/stdc++.h>

using namespace std;

struct node
{
    string name;
    int id;
    string file_type;
};

string const_string, repalce_type;

string outname;
int type;
node get(string s);
void work(int x)
{
    string s;
    x ^= 1;
    int cnt = 0;
    int t = 1;
    while (cin >> s)
    {
        node R = get(s);
        if (t == 1)
            cnt++;

        if (t == 1)
        {
            if(type == 1)
            {
                cout << R.name << cnt - x << R.file_type << " ";
            }
            else cout << R.name << R.file_type << cnt - x << " ";
        }
            
        else
        {
            if(type == 1)
            {
                cout << R.name << cnt - x << R.file_type << "\n";
            }
            else cout << R.name << R.file_type << cnt - x << "\n";
        }
            
        t ^= 1;
    }
}

node get(string s)
{
    node Const;
    int p, q;
    for (int i = 0; i < s.size(); i++)
    {
        if (isdigit(s[i]) || s[i] == '.')
        {
            Const.name = s.substr(0, i);
            p = i;
            if (isdigit(s[i]))
                q = 1;
            else
                q = 2;
            break;
        }
    }

    if (q == 1)
    {
        int res = 0;
        for (int i = p; i < s.size(); i++)
        {
            if (!isdigit(s[i]))
            {
                p = i;
                break;
            }
            res = res * 10 + s[i] - '0';
        }
        Const.id = res;
        Const.file_type = s.substr(p, s.size());
    }

    else
    {
        for(int i = p ;i < s.size(); i++)
        {
            if(isdigit(s[i]))
            {
                p = i;
                break;
            }
            Const.file_type += s[i];
        }
        int res = 0;
        for(int i = p ;i < s.size(); i++)
        {
            if(!isdigit(s[i]))
            {
                break;
            }

            res = res * 10 + s[i] - '0';
        }
        Const.id = res;
    }
    type = q;
    return Const;

}

int main()
{
    //freopen("1.in", "r", stdin);
    cin >> const_string;

    if (const_string.size() == 1)
    {
        if (const_string[0] == '0')
            work(0);
        else
            work(1);
        return 0;
    }
    node Const;
    int p, q;
    for (int i = 0; i < const_string.size(); i++)
    {
        if (isdigit(const_string[i]) || const_string[i] == '.')
        {
            Const.name = const_string.substr(0, i);
            p = i;
            if (isdigit(const_string[i]))
                q = 1;
            else
                q = 2;
            break;
        }
    }

    if (q == 1)
    {
        int res = 0;
        for (int i = p; i < const_string.size(); i++)
        {
            if (!isdigit(const_string[i]))
            {
                p = i;
                break;
            }
            res = res * 10 + const_string[i] - '0';
        }
        Const.id = res;
        Const.file_type = const_string.substr(p, const_string.size());
    }

    else
    {
        for(int i = p ;i < const_string.size(); i++)
        {
            if(isdigit(const_string[i]))
            {
                p = i;
                break;
            }
            Const.file_type += const_string[i];
        }
        int res = 0;
        for(int i = p ;i < const_string.size(); i++)
        {
            if(!isdigit(const_string[i]))
            {
                break;
            }
            res = res * 10 + const_string[i] - '0';
        }
        Const.id = res;
    }

    cin >> outname;
    int t = 1;

    string Replace;
    int cnt = 0;
    while (cin >> Replace)
    {
        if (t == 1)
            cnt++;
        node R = get(Replace);
        if (t == 1)
        {
            if(q == 1)
            {
                cout << Const.name << Const.id + cnt - 1 << Const.file_type << " ";
            }
            else
            {
                cout << Const.name << Const.file_type << Const.id + cnt - 1 << " ";
            }
        }
            
        else
        {
            if(q == 1)
            {
                cout << Const.name << Const.id + cnt - 1 << "." << outname << "\n";
            }
            else
            {
                cout << Const.name << "." << outname << Const.id + cnt - 1 << "\n";
            }
        }
            
        t ^= 1;
    }
    return 0;
}

推荐阅读