问题描述

试题编号: 201403-3
试题名称: 命令行选项
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后可能会包含一 些不是选项的参数。
  选项有两类:带参数的选项和不带参数的选项。一个合法的无参数选项的形式是一个减号后面跟单个小写字母,如"-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<iostream>
#include<cstring>
#include<string>
#include<vector>
#include<map>
using namespace std;
void spilt(vector<string>& v, char s[], char t[])
{char *sp;sp=strtok(s,t);while(sp){v.push_back(sp);sp=strtok(NULL,t);}
}
void mygetline(char pc[])
{char c;while((c=getchar())!='\n'&&c!=EOF)*pc++=c;*pc='\0';
}
int main()
{string format;char s[257];int i,j,n;cin>>format>>n;getchar();for(i=1;i<=n;i++){vector<string> sv;map<string,string> m;mygetline(s);// 切分命令行:命令和各个参数分开spilt(sv,s," ");// 处理各个参数,放入map变量m中for(j=1;j<(int)sv.size();j++){// 判断是否是选项,选项则处理if(sv[j].size()==2&&sv[j][0]=='-') {int pos=format.find(sv[j][1]);// 选项在格式中未找到则出错结束if(pos==-1)break;// 选项未出现过则添加if(m.find(sv[j])==m.end())m[sv[j]]="";// 更新参数:后出现优先if(format[pos+1]==':'&&j+1<(int)sv.size()){m[sv[j]]=sv[j+1];j++;}}elsebreak;}cout<<"Case "<<i<<":";for(map<string,string>::iterator iter=m.begin();iter!=m.end();iter++){cout<<" "<<iter->first;if(iter->second!="")cout<<" "<<iter->second;}cout<<endl;}return 0;
}

转载于:https://www.cnblogs.com/5211314jackrose/p/7532040.html

CCF - 201403-3 - 命令行选项相关推荐

  1. 命令行选项“/source-charset”与预编译头不一致

    命令行选项"/source-charset"与预编译头不一致 解决方法:不使用预编译头:

  2. centos6 升级gcc / 无法识别的命令行选项“-std=gnu++1y”的解决办法

    在npm过程遇到:错误:无法识别的命令行选项"-std=gnu++1y"的解决办法 1.下载源文件,并安装: wget http://people.centos.org/tru/d ...

  3. CSP认证201403-3 命令行选项[C++题解]:模拟题、字符串处理、stringstream处理getline

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 输出要求:对于无参数的选项,输出即可,当然每个只需要输出一次:对于有参数的选项,需要输出最后出现时所带的参数. 当遇到某个字符串既不 ...

  4. Qt Creator使用命令行选项

    Qt Creator使用命令行选项 使用命令行选项 使用自定义样式 使用命令行选项 您可以启动Qt Creator并从命令行指定一些选项.例如,您可以打开任何行和列的文件. 要指定命令行选项,请在Qt ...

  5. python如何选择命令_python 解析命令行选项

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

  6. python执行脚本时的命令行选项_Python 处理脚本的命令行参数(二):使用click

    安装click pip install click 使用步骤 使用@click.command() 装饰一个函数,使之成为命令行接口 使用@click.option() 等装饰函数,为其添加命令行选项 ...

  7. PhantomJS命令行选项

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

  8. DISM 操作系统包 (.cab 或.msu) 服务命令行选项

    DISM 操作系统包 (.cab 或.msu) 服务命令行选项 使用 DISM 与 Windows cabinet (.cab) 或 Windows 更新独立安装程序 (.msu) 文件安装或删除的更 ...

  9. Horizon Client 配置设置和命令行选项

    Horizon Client 配置设置和命令行选项 Twitter FaceBook LinkedIn Weibo 添加到库 添加到库 RSS 下载 PDF 发送反馈 反馈 编辑 评论 更新时间 20 ...

  10. Microsoft Windows Installer 工具 Msiexec.exe 的命令行选项

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

最新文章

  1. db2删除大量数据_Python 连接数据库的多种方法
  2. 【自动驾驶】3. DDS 数据分发服务(Data Distribution Service)
  3. java compareto date_int compareTo(Date anotherDate)
  4. WEB安全_csrf攻击
  5. ifix如何设画面大小_天涯明月刀手游研发揭秘:如何做出有“豪华感”的国风MMO大世界?...
  6. NOI2011 阿狸的打字机题解
  7. 蚂蚁森林:国庆节前组织网友去阿拉善等三地参与秋季验收
  8. 问题 D: Search Problem
  9. python实现逆序输出一个数字
  10. 书店购物车--增删改
  11. Snap7 在西门子PLC的使用
  12. 【TiChoo资讯站】
  13. 发几个vb整人小程序代码.第一次发帖.希望大家多多支持
  14. 时间管理——永远做重要不紧急的事情
  15. 1.一个模型,帮你找到真正热爱的工作
  16. java根据经纬度获取地址信息
  17. C语言基础 数字统计
  18. Matlab R2017b 自动驾驶工具箱学习笔记(2)_Tutorials_Visual Perception Using Monocular Camera
  19. 使用css做水印效果
  20. 通过HttpURLConnection连接上传文件和参数

热门文章

  1. 转载:FilenameUtils的工具类
  2. eclipse光标变成黑块变粗解决办法
  3. MVC3 中使用Unity实现依赖注入
  4. 元素在父元素内垂直居中的思路
  5. 在自定义HttpHandler中如何使用Session
  6. 基于角色的访问控制'的权限管理的数据库的设计实现
  7. tf.layers.flatten
  8. MATLAB使用技巧
  9. Mat的初始化以及Mat与数组的相互转化
  10. 接口 java性能_接口测试性能测试