ccf--20140303--命令行选项
2018-06-17 21:03:55来源:未知 阅读 ()
本题是常规思路,这里要注意:
1)带参命令没有参数和参数错误时终止
2)命令不存在时终止
3)命令都是错误的,不以—开头。
题目和代码如下:
问题描述
试题编号: | 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<bits/stdc++.h> using namespace std; int main(){ string cmd=""; cin>>cmd; int n; cin>>n; cin.ignore(); for(int i=0;i<n;i++){ map<string,string> mmps; //int flag=0; string temps=""; getline(cin,temps); stringstream ss(temps); string ml; ss>>ml;//忽略掉开头的命令名称 while(ss>>ml){ if(ml[0]!='-') break; string temp_ml=ml.substr(1,ml.length()-1); //cout<<"temp_ml:"<<temp_ml<<endl; if(cmd.find(temp_ml)!=string::npos){ int index=cmd.find(temp_ml); if((index<cmd.length()-1)&&cmd[index+1]==':'){ string canshu=""; if(ss.eof()){ break; } ss>>canshu; int flag=0; for(int j=0;j<canshu.length();j++){ if(!(canshu[j]>='0'&&canshu[j]<='9'||canshu[j]=='-'||(canshu[j]>='a'&&canshu[j]<='z'))){ flag=1; break; } } if(canshu=="") flag=1; if(flag==0) mmps[ml]=canshu; else break; }else{ mmps[ml]=""; } }else{ //flag=1; break; } } cout<<"Case "<<i+1<<": "; map<string,string>::iterator it; for(it=mmps.begin();it!=mmps.end();it++){ cout<<it->first<<" "; if(it->second!=""){ cout<<it->second<<" "; } } cout<<endl; } return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Qt 文件选项对话框弹出两次 2019-11-20
- 从命令行运行编译器 2019-03-10
- 让串口调试助手像命令行一样 2019-01-11
- qt cout输出中文乱码解决记录 2018-09-19
- CSP201403-3:命令行选项 2018-09-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash