首页 > 其他分享 >Problem C: 命令行选项

Problem C: 命令行选项

时间:2023-04-29 10:11:41浏览次数:29  
标签:选项 小写字母 参数 ls 命令行 字符串 Problem

Problem Description

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

Input Description

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

Output Description

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

Sample Input

albw:x
4
ls -a -l -a documents -b
ls
ls -w 10 -x -w 15
ls -a -b -c -d -e -l

Sample Output

Case 1: -a -l
Case 2:
Case 3: -w 15 -x
Case 4: -a -b

ac代码:
 1 #格式字符串
 2 Format = list(input())
 3 length = len(Format)
 4 #合法选项- - 带参数和不带参数
 5 option = []
 6 noption = []
 7 command = []
 8 command.append("ls")
 9 for i in range(length):
10     x = Format[i]
11     if x ==':':
12         option.append(Format[i-1])
13         # 若上一个为带参数的选项,则将其从不带选项的列表中移除
14         if i>1:
15             noption.pop(i-1)#remove是删除元素的值,pop是删除下标对应的值
16     else :
17         noption.append(x)
18 n = int(input())
19 for i in range(1,n+1):
20     # 定义列表接受命令输入
21     ls = []
22     # 存储命令包含的字母选项
23     ch = []
24     # 存储命令包含的带参选项的参数
25     val = []
26     ls = input().split(' ')
27     ls = list(ls)
28     print("Case %d:" %i,end='')
29     length = len(ls)
30     m = 1
31     # 注意m++的位置
32     for j in ls:
33 #        print(j[1])
34         if j[1] in noption and j not in ch:
35     #        print(j)
36             ch.append(j)
37             m += 1
38         elif j[1] in option:
39     #        print(j[1])
40             if j not in ch:
41                 ch.append(j)
42     #        print(m,j,ls[m])
43             val.append(ls[m])
44             m += 1
45         elif j in command:
46             m += 1
47             continue
48         # 遇到数字作为参数
49         elif j[0]>='0' and j[0]<='9':
50             m += 1
51             continue
52         # 遇到其他符号
53         else:
54             break
55     l = len(val)
56 #    print(val)
57     ch.sort()# 默认为升序排列
58     for i in ch:
59         print(" %s" %i,end='')
60         flag = 1
61         if i[1] in option:
62             print(" %s" %val[l-1],end='')
63     print()

 

 

标签:选项,小写字母,参数,ls,命令行,字符串,Problem
From: https://www.cnblogs.com/hangsingplus/p/17363634.html

相关文章

  • Problem J: 括号匹配问题
    ProblemDescription在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用......
  • Kubernetes 设置命令行的命名空间
    在较新版本的Kubernetes中,kubectl的默认命名空间已经不再是default,而是用户的当前命名空间。这是因为Kubernetes强烈建议您在不同的命名空间中隔离应用程序和资源,因此kubectl默认使用用户当前的命名空间来提高生产力。您可以使用以下命令来查看当前所在的命名空间:arduin......
  • jar包启动基础命令 java -jar common.jar cmd 命令行执行jar包
    jar包启动基础命令命令行执行jar包java-jarcommon.jar原文链接:https://blog.csdn.net/weixin_40483369/article/details/124392170一般情况下运行jar包,当前是可运行的jar包,直接命令java-jarcommon.jar1按下ctrl+C,关闭当前ssh或者直接关闭窗口,当前程序都会退出。......
  • Kafka命令行常用命令说明(一)
    基于0.8.0版本。 ##查看topic分布情况kafka-list-topic.shbin/kafka-list-topic.sh--zookeeper192.168.197.170:2181,192.168.197.171:2181(列出所有topic的分区情况)bin/kafka-list-topic.sh--zookeeper192.168.197.170:2181,192.168.197.171:2181--topictest(查......
  • NC50454 A Simple Problem with Integers
    题目链接题目题目描述给定数列\(a[1],a[2],\dots,a[n]\),你需要依次进行q个操作,操作有两类:1lrx:给定l,r,x,对于所有\(i\in[l,r]\),将a[i]加上x(换言之,将\(a[l],a[l+1],\dots,a[r]\)分别加上x);2lr:给定l,r,求\(\sum_{i=l}^ra[i]\)的值(换言之,求\(a[l]+a[l+1]+\dots+a......
  • NC51100 A Simple Problem with Integers
    题目链接题目题目描述YouhaveNintegers,\(A_1,A_2,...,A_N\).Youneedtodealwithtwokindsofoperations.Onetypeofoperationistoaddsomegivennumbertoeachnumberinagiveninterval.Theotheristoaskforthesumofnumbersinagivenint......
  • EBS: APP-PER-50022: ORACLE 人力资源管理系统无法检索用户类型配置文件选项的值
    在PO模块设置的人员,点击“人员”功能菜单时,提示: APP-PER-50022。。。。。的错误。路径:PO》》设置》》人员。APP-PER-50022:ORACLE人力资源管理系统无法检索用户类型配置文件选项的值。请确保为您的责任正确设置此值。尝试解决方式(失败了):  PROFILE |     ......
  • CF1699A The Third Three Number Problem
    题意简述构造出一个三元组a,b,c使得(a⊕b)+(a⊕c)+(b⊕c)=n,若无解输出-1。符号⊕的意思为异或个人分析首先要了解异或符号的性质:1,x⊕0=x2,x⊕x=x根据异或符号的性质可以得到一下构造:a=b=0,c=n/2c=0,a=b=n/2通过上述可以发现答案都是偶数所以若n为奇则无解......
  • Apk签名_自签名_命令行_四字节对齐_apktool_apksigner_keytool
    生成秘钥库keytool-genkey-alias别名-keyalgRSA-validity证书有效天数-keystore名称.keystore如需查看:keytool-list-keystore"antma.keystore"注意使用jarsigner签名为v1无法安装在新的设备上以下工具都在Androidstudio的SDK中apksigner签名代码:apksigner......
  • 「CF1188E」Problem from Red Panda
    题目点这里看题目。给定一个长度为\(k\)的非负整数序列\(a\)。你可以对于\(a\)做如下操作任意次:选定\(1\lej\lek\),满足除了\(a_j\)外\(a\)中其它数都为正。而后,令\(a_j\)加上\(k-1\),令除了\(a_j\)外\(a\)中其它数减去\(-1\)。(这样一次操作被称为“操......