题目描述
在命令行输入如下命令:
xcopy /s c:\ d:\e,
各个参数如下:
参数1:命令字xcopy
参数2:字符串/s
参数3:字符串c:\
参数4: 字符串d:\e
请编写一个参数解析程序,实现将命令行各个参数解析出来。
解析规则:
1.参数分隔符为空格
2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” "d:“时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\program,注意输出参数时,需要将”"去掉,引号不存在嵌套情况。
3.参数不定长
4.输入由用例保证,不会出现不符合要求的输入
数据范围:字符串长度:
1
≤
s
≤
1000
1\le s\le 1000
1≤s≤1000
进阶:时间复杂度:
O
(
n
)
O(n)
O(n),空间复杂度:
O
(
n
)
O(n)
O(n)
输入描述
输入一行字符串,可以有空格
输出描述
输出参数个数,分解后的参数,每个参数都独占一行
代码&思路
思路
- 用一个指标判断当前遍历的字符是否由双引号包围。0:否 1:是
- 遍历输入的字符串,遍历到双引号的时候更新指标参数。
- 不妨记指标为flag。当flag=1时,说明此时遍历的部分在一对双引号内,故直到遍历到下一个双引号,当前遍历的部分都是同一个参数的内容;当flag=0时,则以空格为分割符,将参数分割开来。
- 具体的代码实现要注意if的判断条件,当遍历到双引号外的空格时,可以通过加入一个换行符
\n
来保证输出参数的时候换行输出。也可以通过计算换行符的个数+1来得到参数的个数
代码实现
S=input()
n=len(S)
L=''
k=0 #0:非双引号内字符 1:双引号内字符
for i in range(n):
# 双引号判断
if S[i]=='"':
if k==0:
k=1
else:
k=0
#print("i=%d,1" %i)
if k==1 and S[i]!='"':
L=L+S[i]
if k==0 and S[i]!=' ' and S[i]!='"':
L=L+S[i]
if k==0 and S[i]==' ':
L=L+'\n'
#print("i=%d,2" %i)
print(list(L).count('\n')+1)
print(L)