ccf-201403-3有趣的命令行

傻逼题,要是考试只能得0分。。
提供几组傻逼数据,这要是在真实的生活中一定是错的。。。

还是要好好读题吧,全凭自己的感觉就得0分

albw:x
4
ls -a docu
Case 1: -a
ls -w -w
Case 2: -w -w
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<bitset>

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
#define pb(x) push_back(x)
#define cls(x, val) memset(x, val, sizeof(x))
#define fi first
#define se second
#define mp(x, y) make_pair(x, y)
#define inc(i, l, r) for(int i=l; i<=r; i++)
const int inf = 0x3f3f3f3f;
const int maxn = 2000+10;
bool have[maxn];
bool exist[maxn];
struct Node{
    string s;
    string var;
    bool prin;
}node[26];
int n;
vector<string> split;

vector<string> process(char *s){
    int st = 0;
    vector<string> temp;
    string t;
    int len = strlen(s);
    for(int i=0; i<len; i++){
        if(s[i] == ' '){
            t = "";
            for(int j=st; j<i; j++){
                t+=s[j];
            }
            temp.push_back(t);
            st = i+1;
        }
    }
    t = "";
    for(int j=st; j<len; j++){
        t+=s[j];
    }
    temp.push_back(t);
    return temp;
}

int main(){
    ios::sync_with_stdio(false);
    char op[300];
    scanf("%s", op);
    int len = strlen(op);
    for(int i=0; i<len; i++){
        if(op[i]>='a'&&op[i]<='z'){
            exist[op[i]-'a'] = true;
            if(i+1<len && op[i+1] == ':'){
                have[op[i]-'a'] = true;
                i++;
            }
        }
    }

    int kase = 1;
    scanf("%d", &n);
    getchar();
    while(n--){
        gets(op);
        for(int i=0; i<26; i++) node[i].prin = false;
        split = process(op);

        int sz = split.size();
//        for(int i=0; i<sz; i++){
//            printf("%s ", split[i].c_str());
//        }
        for(int i=1; i<sz; i++){
            string temp = split[i];
            if(temp[0] == '-'){
                int c = temp[1]-'a';
                if(!exist[c]) break;
                if(have[c] == true){
                    if(i==sz-1) break;
                    else {
                        node[c].prin = true;
                        node[c].var = split[i+1];
                    }
                    i++;
                }
                else{
                    node[c].prin = true;
                }

            }
            else break;
        }
        //cout<<"Case "<<kase++<<":";
        printf("Case %d:", kase++);
        for(int i=0; i<26; i++){
            if(node[i].prin){
                //cout<<" -"<<char(i+'a');
                printf(" -%c", char(i+'a'));
                if(have[i]){
                    //cout<<" "<<node[i].var;
                    printf(" %s", node[i].var.c_str());
                }
            }

        }
        printf("\n");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/babydragon/p/11715731.html

时间: 2024-11-01 20:30:02

ccf-201403-3有趣的命令行的相关文章

首届CCF真题3-命令行选项

问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项.每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔.这些字 符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用 对它进行处理.在工具名字之后可能会包含若干选项,然后可能会包含一些不是选项的参数. 选项有两类:带参数的选项和不带参数的选项.一个合法的无参数选项的形式是一个减号后面跟单个小写字母,如"-a" 或"-b".而带参数 选项则由两个由空格分隔的字符串构成,前者的格式要求

linux有趣的命令行技巧

在我笔记上看到的,具体是在哪个网页看到的忘了 linuxm每次history显示时间 命令行和选项解释 linux每次history显示时间 在用户文件夹下的.bashrc文件中添加如下 1 export HISTTIMEFORMAT="[%m/%d/%y %T] " 在终端中运行 1 source ~/.bashrc   命令行和选项解释 HISTTIMEFORMAT设置时间格式环境变量 %d天 %m月 %y年 %T时间戳 source简而言之就是将文件内容发送给shell来执行 .

实用且有趣Bash命令提示行

关于颜色之类的,就自由发挥了. 1. 在成功执行的命令上增加一个笑脸符号: 命令执行成功,你将会得到一个笑脸作为你的命令行提示,一旦的命令执行失败,命令行提示将会换成一个哭脸.且闪烁和高亮. PS1="\`if [ \$? = 0 ]; then echo   \[\e[40\;33\;5\;1m\]^_^\[\e[0m\]; else echo \[\e[40\;31\;5\;1m\]@[email protected]\[\e[0m\];   fi\`[\[email protected]\

你值得了解的 10 个有趣的 Linux 命令行小技巧

摘要: 我非常喜欢使用命令,因为它们比 GUI(图形用户界面)应用程序对 Linux 系统提供更多的控制,因此,我一直在寻找一些有趣的方法让 Linux 的操作变得简单好玩,主要是基于终端操作. 当我们发现使用 Linux 的新技巧时,尤其是像我这样的命令行极客,我们总会感到非常来劲. 我非常喜欢使用命令,因为它们比 GUI(图形用户界面)应用程序对 Linux 系统提供更多的控制,因此,我一直在寻找一些有趣的方法让 Linux 的操作变得简单好玩,主要是基于终端操作. 当我们发现使用 Linu

CCF真题之命令行选项

201403-3 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项.每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔.这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理.在工具名字之后可能会包含若干选项,然后可能会包含一 些不是选项的参数. 选项有两类:带参数的选项和不带参数的选项.一个合法的无参数选项的形式是一个减号后面跟单个小写字母,如"-a" 或"-b".而带参数选项则由两个由空格分隔的字符串构成,

有趣的linux命令行工具-lolcat

lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具 何为Lolcat Lolcat 是一个针对 Linux,BSD 和 OSX 平台的工具,它类似于 cat 命令,并为 cat 的输出添加彩虹般的色彩. Lolcat 主要用于在 Linux 终端中为文本添加彩虹般的色彩. 在linux中安装Lolcat 1.Lolcat 工具在许多 Linux 发行版的软件仓库中都可获取到,但可获得的版本都有些陈旧,而你可以通过 git 仓库下载和安装最新版本的 lolcat. 由于 Lolca

nodejs npm命令行总结

安装包 npm [install/i] [package_name] 本地模式:npm install命令就是采用本地模式,即把包安装到当前目录的 node_modules 子目录下 全局模式:npm 还有另一种不同的安装模式被成为全局模式,使用方法为:npm [install/i] -g [package_name] 总而言之,当我们要把某个包作为工程运行时的一部分时,通过本地模式获取,如果要 在命令行下使用,则使用全局模式安装 npm 提供了一个有趣的命令 npm link,它的功能是在本地

Cheat—— 给Linux初学者和管理员一个终极命令行&quot;备忘单&quot;

编译自:http://www.tecmint.com/cheat-command-line-cheat-sheet-for-linux-users/作者: Avishek Kumar原创:LCTT https://linux.cn/article-3760-1.html译者: su-kaiyao原文稍有改动 当你不确定你所运行的命令,尤其是那些使用了许多选项的复杂命令时,你会怎么做?在这种情况下,我们使用man pages来获取帮助.还有一些其它的选择可能包括像‘help’,‘whereis’和

Ubuntu有趣的命令

1 Aptitude $aptitude mooThere are no Easter Eggs in this program.???$ aptitude -v mooThere really are no Easter Eggs in this program.$ aptitude -vv mooDidn't I already tell you that there are no Easter Eggs in this program?$ aptitude -vvv mooOkay, ok