2014年首届CCF软件能力认证试题第三题_(8分)我省某校园内放着一个校园雕塑,如下图所示,老师想测试一下小明解决问题的能力,他这样告诉小明,-程序员宅基地

技术标签: 算法  命令行  CCF认证  

题目3 命令行选项
时间限制: 1 秒
空间限制: 256 MB
问题描述
请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。
每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字
符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用
对它进行处理。在工具名字之后可能会包含若干选项,然后可能会包含一
些不是选项的参数。
选项有两类:带参数的选项和不带参数的选项。一个合法的无参数
选项的形式是一个减号后面跟单个小写字母,如”-a” 或”-b”。而带参数
选项则由两个由空格分隔的字符串构成,前者的格式要求与无参数选项相
同,后者则是该选项的参数,是由小写字母,数字和减号组成的非空字符串。
该命令行工具的作者提供给你一个格式字符串以指定他的命令行工具需要接受哪些选项。这个字符串由若干小写字母和冒号组成,其中的每个小写字母表示一个该程序接受的选项。如果该小写字母后面紧跟了一个冒号,它就表示一个带参数的选项,否则则为不带参数的选项。例如,”ab:m:” 表示该程序接受三种选项,即”-a”(不带参数),”-b”(带参数),
以及”-m”(带参数)。
命令行工具的作者准备了若干条命令行用以测试你的程序。对于每个命令行,你的工具应当一直向后分析。当你的工具遇到某个字符串既不是合法的选项,又不是某个合法选项的参数时,分析就停止。命令行剩余的未分析部分不构成该命令的选项,因此你的程序应当忽略它们。

输入格式
输入的第一行是一个格式字符串,它至少包含一个字符,且长度不超
过52。格式字符串只包含小写字母和冒号,保证每个小写字母至多出现一
次,不会有两个相邻的冒号,也不会以冒号开头。输入的第二行是一个正整数N(1 N 20),表示你需要处理的命令行的个数。
接下来有N 行,每行是一个待处理的命令行,它包括不超过256 个字符。该命令行一定是若干个由单个空格分隔的字符串构成,每个字符串里只包含小写字母,数字和减号。

输出格式:
输出有N 行。其中第i 行以”Case i:” 开始,然后应当有恰好一个空格,然后应当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。如果一个选项在命令行中出现了多次,只输出一次。如果一个带参数的选项在命令行中出现了多次,只输出最后一次出现时所带的参数。

思路:
字符串处理的题目,要很小心=.=
一开始是解析规则字符串rule,因为命令只可能是小写字母,所以用哈希表记录每一个命令的使用规则(0 没有这个码;1 有这个码不能接参数;2 接参数 )
接下来是处理输入的字符串,根据上面的规则来处理。相同命令只输出一次,要检查前面是否已经输出该命令,输出参数是注意修改前面命令的参数(因为只输出最后一个参数)。遇到不符合的情况就退出,结束解析。

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <map>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main(){
    int i,j,cnt;
    char cc;
    std::vector< std::vector<string> > res;
    string clause[20][256];
    //memset(clause,"",sizeof(string)*20*256);
    for(i=0;i<20;i++){
    for(j=0;j<256;j++){
    clause[i][j] = "";
    }
    }
    map<char,int> map;//0 没有这个码;1 有这个码不能接参数;2 可以接参数 
    for(char ch='a';ch <= 'z';ch++){
       map.insert(pair<char,int>(ch,0));
    }
    string rule;
    //处理规则 
    cin>>rule;
    for(i=0;i<rule.length()-1;i++){
      if(rule[i]>='a'&&rule[i]<='z'&&rule[i+1]==':'){
          map[rule[i]]=2;
          continue;
      }
      else {
          map[rule[i]]=1;
      }
    }
    if(rule[rule.length()-2]==':') map[rule[rule.length()-1]]=1;
    else if(rule[rule.length()-1]==':') map[rule[rule.length()-2]]=2;
    else map[rule[rule.length()-1]]=1;
    //读入命令 
    cin>>cnt;
    scanf("%c", &cc);
    int cn = 0,num=0;
    while(cnt){
    char buffer;
    string s;
    i=0;
    //输入命令 
    while(scanf("%c", &buffer)){
    if(buffer=='\n') break;
    else if(buffer==' ') i++;
    else clause[cn][i] += buffer;    
    }
    // 处理命令 
    vector<string> ans;
    num=i;
    i=1;
    for(i=1;clause[cn][i]!="";i++){
    if(clause[cn][i][0]=='-'&&map[clause[cn][i][1]]==0) break;
    else if(clause[cn][i][0]=='-'&&map[clause[cn][i][1]]==1) {

         if(find( ans.begin( ), ans.end( ), clause[cn][i] )==ans.end()) ans.push_back(clause[cn][i]);
         }  
    else if(clause[cn][i][0]=='-'&&map[clause[cn][i][1]]==2) {

         if(find( ans.begin( ), ans.end( ), clause[cn][i] )==ans.end()) ans.push_back(clause[cn][i]);
         if(clause[cn][i+1]!=""&&clause[cn][i+1][0]!='-') {
         if(ans[ans.size()-1]==clause[cn][i]) ans.push_back(clause[cn][i+1]);
         else *(find( ans.begin( ), ans.end( ), clause[cn][i] )+1) = clause[cn][i+1];
         i++;
         continue;
         }
         else break;
         }
    else break; 
    }
    res.push_back(ans);

    cn++;
    cnt--;
    }

    for(i=0;i<res.size();i++){
     cout<<"Case "<<i+1<<": ";
    for(j=0;j<res[i].size();j++){
     cout<<res[i][j]<<" ";
    }
    cout<<endl;
    }


    system("pause");
    return 0;
    }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/iboxty/article/details/44701147

智能推荐

Bishop 模式识别与机器学习读书笔记_ch3.3 广义线性回归模型_bishop书后习题-程序员宅基地

文章浏览阅读412次。广义线性回归及正则化方法_bishop书后习题

【eclipse技巧】:AmaterasUML工具使用、eclipse保存自动格式化设置、代码自动补全提示设置-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏17次。【eclipse技巧】:AmaterasUML工具使用、eclipse保存自动格式化设置、代码自动补全提示设置_amaterasuml

Python大数据之PySpark(四)SparkBase&Core-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏13次。executor-memory 默认1G,Memory per executor (e.g. 1000M, 2G) (Default: 1G) ,每个executour的内存。–executor-memory 默认1G,Memory per executor (e.g. 1000M, 2G) (Default: 1G) ,每个executour的内存。Yarn的回顾:Driver------AppMaster------RM-----NodeManager—Continer----Task。_pyspark

scrapy_当你准备启动一个项目时,可以从这个教程开始-程序员宅基地

文章浏览阅读446次。scrapyScrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。_当你准备启动一个项目时,可以从这个教程开始

树莓派中SIM7600G-H 4G DONGLE模块使用记录(二)使用花生壳服务器实现数据的远程传输_树莓派有sim卡模块吗-程序员宅基地

文章浏览阅读4.7k次,点赞11次,收藏18次。项目场景:在之前对树莓派进行PPP拨号上网/4G上网后,需要对树莓派中采集到的数据远程上传,并能接收云端软件下达的指令。然而在实现过程中,我们并不能够直接通过ITCP/IP通信实现数据的远程传输,还需要一个服务器作为中间桥梁,将云端主机的IP端口映射在全网上,这样树莓派才能通过映射后的IP地址与云端主机建立连接,实现数据的远程传输。花生壳花生壳是一款能够免费进行内网穿透与端口映射的服务器工具,可以在官网上直接搜索无需配置。支持多种通信格式,这里我们使用TCP通信类型。网络调试助手由于项目主体_树莓派有sim卡模块吗

先是IPV6,再是WI-FI7你都清楚这是什么吗?_ipv6和wifi6有什么区别-程序员宅基地

文章浏览阅读825次。先是IPV6,再是WI-FI7你都清楚这是什么吗?_ipv6和wifi6有什么区别

随便推点

汉诺塔(Tower of Hanoi)--------递归思路_汉诺塔递归-程序员宅基地

文章浏览阅读4.7k次,点赞23次,收藏77次。汉诺塔问题的递归思路:将 n 个圆盘分为 n-1 (即除最低层的圆盘)与 1 (即最底层的圆盘),将n-1个圆盘移动到中转位置,将1移动到目的位置,再将 n-1 分为 (n-1)- 1与 1,将(n-1)- 1 移动到中转位置,将1移动到目的位置_汉诺塔递归

蓝牙AOA高精度定位_aoa 定位算法 java-程序员宅基地

文章浏览阅读8.3k次,点赞4次,收藏58次。01—蓝牙AOA定位技术原理2019 年初,蓝牙技大联盟宣布蓝牙 5.1 引入了新的“寻向”功能,这个功能可检测蓝牙信号的方向,将大幅提高蓝牙定位的精确度,提供更好的位置服务, 结束了以往..._aoa 定位算法 java

CSDN头版头条 《近匠》 Wijmo 5 CTO:从Web到移动,我的25年编程生涯-程序员宅基地

文章浏览阅读2.5k次。《近匠》第64期,Wijmo 5是由GrapeCity旗下ComponentOne公司开发的新一代HTML5/JavaScript控件库。本期近匠采访了Wijmo 5 CTO Bernardo Castilho先生,听他讲述从Web到移动的25年编程生涯,以及Wijmo 5的开发故事。

几行代码轻松实现,Tensorlayer 2.0推出深度强化学习基准库_tensorlayer 2.0+-程序员宅基地

文章浏览阅读494次。2019-11-11 16:37:04机器之心发布机器之心编辑部强化学习通过使用奖励函数对智能体的策略进行优化,深度强化学习则将深度神经网络应用于强化学习算法。深度强化学习由于其可扩展性,受到科研界和工业界越来越多的关注,其应用包括简单的基于图像的游戏,和高度复杂的游戏如星际争霸,以及棋牌类游戏如围棋、德州扑克等,在机器人控制领域也逐渐被科研人员采用。近日,为了让工业界能更好地..._tensorlayer 2.0+

vivado中各个文件的含义_vivado 文件集-程序员宅基地

文章浏览阅读5.6k次,点赞4次,收藏31次。大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。今天给大侠带来了Xilinx vivado中各个文件的含义,话不多说,上货。在Xilinx ISE中不同的操作都有不同的文件类型对应,例如综合、布局、布线、生成比特流等都会产生特定格式的文件,在vivado中也是一样,只不过在vivado中,文件的格式相比于ISE中更加统一。1,.dcp文件,在ise中每个过程都会产生特定格式.._vivado 文件集

中科大计算机与技术学院报录比,报录比49:1!院校专业对比!盘点那些堪称“卷中之王”的专业!...-程序员宅基地

文章浏览阅读1.6k次。原标题:报录比49:1!院校专业对比!盘点那些堪称“卷中之王”的专业!院校报录比更新这两天好多院校都开始陆续公布20年报录比相关数据,真是不看不知道,一看吓一跳,1615人报名,录取33人,报录比50:1,堪称内卷王中王,小黑看到只想大喊一声“快逃!”。今天我们就来盘点一下近两年内卷到飞起的专业和院校,给大家排排雷! 新传新传的“卷”已经和学校没有什么关系了,是的,我不针对哪个学校,我说的是所有学..._中科大计算机考研学硕 报录比

推荐文章

热门文章

相关标签