问题描述
试题编号: | 201403-3 |
试题名称: | 命令行选项 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后可能会包含一 些不是选项的参数。 输入格式 输入的第一行是一个格式字符串,它至少包含一个字符,且长度不超过 52。格式字符串只包含小写字母和冒号,保证每个小写字母至多出现一次,不会有两个相邻的冒号,也不会以冒号开头。 输出格式 输出有 N 行。其中第 i 行以"Case i:" 开始,然后应当有恰好一个空格,然后应当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。如果一个选项在命令行中出现了多次,只输出一次。如果一个带参数的选项在命令行中出 现了多次,只输出最后一次出现时所带的参数。 样例输入 albw:x 样例输出 Case 1: -a -l |
解题思路:
在两个列表list中分别存入有参和无参选项,遍历语句,使用split()空格分段,将每段与选项匹配,使用字典dict记录下来,最后排序输出。
这道题错了很多次,改错点:参数中也可以含有‘-’只能按空格区分每个字符串,有参时,注意下一位是否越界。
代码
#命令行选项
options = input()
n = int(input())
sop=[]#single option
mop=[]#multi option
options += " "
for i in range(len(options)-1):
if(options[i+1]==':'):
mop.append(options[i])#有参
elif(options[i]!=':'):
sop.append(options[i])#无参选项
for t in range(n):
cmd = input().split()#按照空格分段,之前使用‘-’分段没考虑参数中也可以含有‘-’
coption = dict()
i=1
while(i<len(cmd)):
if(len(cmd[i]) == 2 and cmd[i][0]=='-'):#无参选项
if(cmd[i][1] in sop):
coption[cmd[i][1]]=""#值为空
i+=1
elif(cmd[i][1] in mop and i+1 < len(cmd)):#有参
coption[cmd[i][1]]=cmd[i+1]#值为参数
i+=2
else: #选项名不匹配
break
else: #不匹配
break
keys = list(set(coption.keys()))
keys.sort()#按字母序排列
print("Case "+str(t+1)+":",end="")
for key in keys:
print(" -"+key,end="")
if(coption[key]!=""):
print(" "+coption[key],end="")
print()