时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后可能会包含一 些不是选项的参数。 输入格式 输入的第一行是一个格式字符串,它至少包含一个字符,且长度不超过 52。格式字符串只包含小写字母和冒号,保证每个小写字母至多出现一次,不会有两个相邻的冒号,也不会以冒号开头。 输出格式 输出有 N 行。其中第 i 行以"Case i:" 开始,然后应当有恰好一个空格,然后应当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。如果一个选项在命令行中出现了多次,只输出一次。如果一个带参数的选项在命令行中出 现了多次,只输出最后一次出现时所带的参数。 样例输入 albw:x 样例输出 Case 1: -a -l |
C++写就用map,很妥;小心python里判断里有数组越界会直接崩。。。
def judge(str):
for i in str:
if not (i.isdigit() or i.islower() or i=='-'):
return False
return True
while True:
try:
cmd = input()
n = int(input())
leng = len(cmd)
cmd1=[]
cmd2=[]
cmd+=" "
for i in range(len(cmd)-1):
if(cmd[i+1]==':'):
cmd1.append(cmd[i])#有参
elif(cmd[i]!=':'):
cmd2.append(cmd[i])#无参选项
for k in range(n):
dict = {} #定义字典
raw = input().split()#每个元素都是个字符串
print("Case " + str(k + 1) + ": ", end="")
i=1
while i< len(raw):
if len(raw[i])==2 and raw[i][0]=='-':#是个选项
if raw[i][1] in cmd2:
dict[raw[i]] = "" #值为空
i+=1
elif i+1<len(raw) and raw[i][1] in cmd1: #有参数
if not judge(raw[i+1]): #检测下一个字符串是否合格
break
dict[raw[i]] = " " + raw[i+1]
i+=2 #跳过下一个数字
else:
break #选项名不匹配
else:
break
ans = sorted(dict.items(),key=lambda x:x[0]) #按dict的第一键值排序,默认升序
for i in ans:
print(i[0]+i[1],end=" ")
print()
except:
break