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

智能推荐

elastic-job任务能够正常执行,但是elastic-console显示任务下线_elasticjob 下线-程序员宅基地

文章浏览阅读2.8k次。elastic-job任务能够正常执行,但是elastic-console显示任务下线time>>Thu Apr 25 10:21:06 CST 2019 JobA>>>>>>>time>>Thu Apr 25 10:21:09 CST 2019 JobA>>>>>>>ti..._elasticjob 下线

读写ini文件 c#_imc.ini-程序员宅基地

文章浏览阅读177次。一、ini文件格式二、新建IniHelper类,用于读写Ini文件using System.Runtime.InteropServices;using System.Text;namespace INITest{ class IniHelper { private string sPath = ""; public IniHelp..._imc.ini

LeetCode每日一题(持续更新中~~~)-程序员宅基地

文章浏览阅读1k次。2432. 处理用时最长的那个任务的员工;1419. 数青蛙;1010. 总持续时间可被 60 整除的歌曲;2437. 有效时间的数目;1015. 可被 K 整除的最小整数;1016. 子串能表示从 1 到 N 数字的二进制串; 2441. 与对应负数同时存在的最大正整数;1054. 距离相等的条形码;1072. 按列翻转得到最大值等行数;2446. 判断两个事件是否存在冲突;1080. 根到叶路径上的不足节点;_leetcode每日一题

大模型参数高效微调技术原理综述(二)-BitFit、Prefix Tuning、Prompt Tuning-程序员宅基地

文章浏览阅读671次。Prompt token 的长度在20左右时的表现已经不错(超过20之后,提升Prompt token长度,对模型的性能提升不明显了),同样的,这个gap也会随着模型参数规模的提升而减小(即对于超大规模模型而言,即使 Prompt token 长度很短,对性能也不会有太大的影响)。同时,通过实验结果还可以看出,BitFit微调结果相对全量参数微调而言, 只更新极少量参数的情况下,在多个数据集上都达到了不错的效果,虽不及全量参数微调,但是远超固定全部模型参数的Frozen方式。另一方面也会占很多存储空间。

Notice: Undefined variable: server in的解决方法_undefined variable: _server-程序员宅基地

文章浏览阅读2.2k次。PHP中遇见这种问题的解决方法就是php.ini这个配置文件修改一行代码,解决方法如下:在php.ini中error_reporting = E_ALL (笔记本自带查找功能,查找之后进行替换即可,不用一行一行对着找)修改成error_reporting = E_ALL & ~E_NOTICE (再重启apache2.2就行了)..._undefined variable: _server

通俗易懂TypeScript的高级类型方法------Partial, Required, Pick, Omit, Readonly, NonNullable_在 typescript 中,如何实现 partial<t>,以使得: typescript typ-程序员宅基地

文章浏览阅读519次。通俗易懂TypeScript的高级类型方法------Partial, Required, Pick, Omit, Readonly, NonNullable_在 typescript 中,如何实现 partial,以使得: typescript type user = { id

随便推点

使用Protege4和CO-ODE工具构建OWL本体的实用指南-1.3版本(4.Building An OWL Ontology)_ttl后缀文件用什么软 protege-程序员宅基地

文章浏览阅读580次。2021.10.29.周五,今天又做了一次核酸检测!我开始阅读我需要的内容!别人的话,即使激励也是焦虑的开始!有压力才有动力!没有动力,就没有办法拼搏!但是,方向要对啊!不能被误导了!学着分辨!(PS:觉得先打个稿子吧!等到10分钟的时候再走!21:10的时候!)Building An OWL Ontology4.1这个教程使用的protege好像不是一个版本的!..._ttl后缀文件用什么软 protege

Debian lxde 自动登录设置_debian开机自动登录-程序员宅基地

文章浏览阅读7.3k次。个人电脑一直使用debian,但是每次开机都要输入用户名和密码,显得有些繁琐。另外,电脑只有我一个人用,也不用靠密码来保护什么个人隐私。所以干脆就设置上自动登录。方法:修改 /etc/lightdm/lightdm.conf文件,在文件中找到#autologin-user=,修改为autologin-user=USER,将USER替换为你的用户名。重启后,发现真的不用输_debian开机自动登录

SpringBoot:统一处理null数据类型默认值_spriongboot统一返回 null 返回-程序员宅基地

文章浏览阅读1.1k次,点赞8次,收藏8次。【代码】Springboot:统一处理null数据类型默认值。_spriongboot统一返回 null 返回

Hadoop(1)_kafka mpp-程序员宅基地

文章浏览阅读220次。一、学习大数据需要学什么拉钩学习Java、Python、ScalaLinux、Hadoop、Storm、Spark、Flink、HBase、Hive、Impala、ElasticSearch、Kafka、Flume、Scribe、mahout、ElasticSearch、mysql、mongodb、redis、Zookeeper、sqoop学习大数据需要的基础Java SE:大数据技术框架中90%都是用Java语言写的。MySQL:SQLLinux:大数据技术框架都是部署在Linux系_kafka mpp

delphi fmx zxing原生不使用外部库二维码,条码扫描速度很快_delphi 二维码扫描-程序员宅基地

文章浏览阅读2.1k次。开源地址:GitHub - Spelt/ZXing.Delphi at QRCodeZXing.Delphi 是一个原生 Object Pascal 库,它基于众所周知的开源条形码库:ZXing(斑马线)。 该端口基于 ZXing 的 .Net Redth 端口和 Java 端口。 这是我认为的第一个原生 FireMonkey 条形码库。 它针对所有 FireMonkey 移动平台。使用这个库,您可以在不使用外部库链接的情况下以本机速度进行扫描,并避免兼容性问题和依赖性。 它很快。它与 Delphi XE7_delphi 二维码扫描

STM32-微项目10-ADC多通道采集+DMA数据转移_stm32f1多通道adc-程序员宅基地

文章浏览阅读3.5k次,点赞6次,收藏36次。外部GPIO采集----ADC转化执行-----存放到CR寄存器中-----触发DMA转移信号----DMA硬件触发开始转移数据-----从外设寄存器DR转移到SRAM的数组中。需要注意:1)触发模式---硬件触发;需要注意:1)触发模式---硬件触发;③配置ADC输入通道开启,使用ADC_Channel_0到ADC_Channel_3,分别放置在规则组1-3通道上;③配置ADC输入通道开启,使用ADC_Channel_0到ADC_Channel_3,分别放置在规则组1-3通道上;7)配置计数器值4位;_stm32f1多通道adc

推荐文章

热门文章

相关标签