ccf命令行选项只能用c实现_CCF真题之命令行选项

201403-3

问题描述

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

输入格式

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

输出格式

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

样例输入

albw:x

4

ls -a -l -a documents -b

ls

ls -w 10 -x -w 15

ls -a -b -c -d -e -l

样例输出

Case 1: -a -l

Case 2:

Case 3: -w 15 -x

Case 4: -a -b

源代码:

/* 思路:不断的取子串,通过空格再不断的截取字符串,取出命令行选项和参数*/

#include

#include

#include //map会自动排序

using namespace std;

int main(){

int N,i,first,second,index,flag;

string letters,cmds,tmp,parameter;

map m;

cin>>letters>>N;

getline(cin,cmds);

for(i = 0; i < N; i++){

getline(cin,cmds);

first = cmds.find(" ");

while(first > 0){

flag=0; //切记初始化,此处因未初始化才20分!

cmds = cmds.substr(first+1,cmds.length()-first-1);

second = cmds.find(" ");

if(second < 0)

{

flag=1;

second = cmds.length();

}// break;

tmp = cmds.substr(0,second);

if(tmp.length() == 2 && tmp[0] == '-'){

index = letters.find(tmp[1]);

if(index >= 0){

if(index+1 < letters.length() &&letters[index+1] == ':'){ //带参数

if(flag==1) break;//若带参数,输入ls -w,则报错,若无参,输入ls -a,则正确参数

else

{

cmds = cmds.substr(second+1,cmds.length()-second-1);

second = cmds.find(" ");

if(second < 0) second = cmds.length();

parameter = cmds.substr(0,second);

if(m.count(tmp))//使用count检查map对象中某键是否存在

m.erase(tmp); //存在,则删除  //处理不重复输出

m.insert(pair(tmp,parameter));

}

//continue;

}

else

{

if(m.count(tmp))//使用count检查map对象中某键是否存在

m.erase(tmp); //存在,则删除

m.insert(pair(tmp,"")); //处理不重复输出

}

first = cmds.find(" ");

}

else break; //无这个参数

}

else break;  //参数错误

//first = cmds.find(" ");

}

cout<

map::iterator it = m.begin();  //map默认是排好序的

while(it != m.end()){

cout<first;

if(it->second !="")

cout<second;

++it;

}

cout<

m.clear();

}

return 0;

}

Maven学习(四)Maven 命令行选项

说明: 1.使用-选项时,和后面的参数之间可以不要空格.而使用--选项时,和后面的参数之    间必须有空格.如下面的例子: $ mvn help:describe -Dcmd=compiler:co ...

学习笔记——Maven 命令行选项

2014-10-09:更新裁剪反应堆具体用法 说明: 1.使用-选项时,和后面的参数之间可以不要空格.而使用--选项时,和后面的参数之    间必须有空格.如下面的例子: $ mvn help:des ...

Microsoft Windows Installer 工具 Msiexec&period;exe 的命令行选项

摘自:http://support.microsoft.com/kb/314881/zh-cn 概要 本文列出了 Windows Installer 工具 Msiexec.exe 的命令行选项.Msi ...

make的命令行选项

make的命令行选项 -b -m 忽略,提供其它版本make兼容性. -B --always-make 强制重建所有规则的目标,不根据规则的依赖描述决定是否重建目标文件. -C DIR --direc ...

PhantomJS命令行选项

支持命令行选项有: --help或-h列出所有可能的命令行选项.立即停止,不会运行一个脚本作为参数传递. --version或-v打印的版本PhantomJS.立即停止,不会运行一个脚本作为参数传递. ...

【Python】【自动化测试】【pytest】【常用命令行选项】

https://www.cnblogs.com/cnkemi/p/9989019.html http://www.cnblogs.com/cnkemi/p/10002788.html pytest 常 ...

python 解析命令行选项

问题: 程序如何能够解析命令行选项 解决方案 argparse 模块可被用来解析命令行选项 argparse 模块 argparse 模块是标准库中最大的模块之一,拥有大量的配置选项 dest 参数指 ...

Ruby 命令行选项

Ruby 命令行选项 Ruby 一般是从命令行运行,方式如下: $ ruby [ options ] [.] [ programfile ] [ arguments ... ] 解释器可以通过下列选项 ...

CCF CSP 201403-3 命令行选项

CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...

随机推荐

Java核心知识点学习----使用Condition控制线程通信

一.需求 实现线程间的通信,主线程循环3次后,子线程2循环2次,子线程3循环3次,然后主线程接着循环3次,如此循环3次. 即:A->B->C---A->B->C---A-&gt ...

Jquery插件写法及extentd函数

JQuery插件写法 JQuery插件又分为类扩展方法和对象扩展方法两种,类插件是定义在JQuery命令空间的全局函数,直接通过可调用,如可调用,如可调用,如.ajax():对象插件是扩展JQuery ...

c&num;检测端口是否被占用的简单实例

c#检测端口是否被占用的简单实例. 当我们要创建一个Tcp/Ip Server connection ,我们需要一个范围在1000到65535之间的端口 . 但是本机一个端口只能一个程序监听,所以我们 ...

C&plus;&plus;中map用法

/************************************************************************** Map的特点: 1.存储Key-value对* ...

app与server联系

--- /frameworks/base/services/java/com/android/server目录下SystemServer.java 在ServerThread的run函数中增加加载Rf ...

在 Java 应用程序中使用 Elasticsearch

如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

利用路由器搭建受限wifi热点,气死蹭网的坏人~

很多人的无线路由器都设密码,不在家的时候还会关了,一点互联网分享的精神都没有.我就一直开着无线路由器,也从不设密码,让周围的人可以搜到我的信号,连接成功,我就会很开心.虽然我没有装宽带,但我觉得这已经 ...

js如何获取样式?

在某个项目中,我们经常会需要来获取某个元素的样式,比如说获取一个div的color:这样,新的问出现了, var style = box.style.width;console.log(style); ...

C&num; 串口操作系列&lpar;5&rpar;--通讯库雏形

C# 串口操作系列(5)--通讯库雏形 标签: 通讯c#数据分析byteclassstring 2010-08-09 00:07 21378人阅读 评论(73) 收藏 举报  分类: 通讯类库设计(4 ...

环境准备——之Jdk安装

JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK),没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指cl ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值