华为OJ(参数解析)

来源:互联网 发布:美国ge膜和陶氏膜 知乎 编辑:程序博客网 时间:2024/06/05 09:28

描述

在命令行输入如下命令:

xcopy /s c:\ d:\,

各个参数如下: 

参数1:命令字xcopy 

参数2:字符串/s

参数3:字符串c:\

参数4: 字符串d:\

请编写一个参数解析程序,实现将命令行各个参数解析出来。

 

解析规则: 

1.参数分隔符为空格 
2.对于用“”包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” “d:\”时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\program,注意输出参数时,需要将“”去掉,引号不存在嵌套情况。
3.参数不定长 
4.输入由用例保证,不会出现不符合要求的输入 
 

 

知识点字符串运行时间限制10M内存限制128输入

输入一行字符串,可以有空格

输出

输出参数个数,分解后的参数,每个参数都独占一行

样例输入xcopy /s c:\\ d:\\样例输出4 xcopy /s c:\\ d:\\还不能小瞧了这个题目,第一次在参数个数上出错了,后来通过判断最后一个字符是否是双引号解决。完美,hiahia~~

#include<iostream>#include<string>using namespace std;int main(){string s,out;getline(cin,s);int index,cnt=0;for(int i=0;i<s.size();i++){if(s[i]==char(34)){index=s.find_first_of(char(34),i+1);//如果是双引号,找到下一个双引号,将两个双引号之间的for(int j=i+1;j<index;j++)<span style="white-space:pre"></span>//字符保存在out中,计数加一,index为下一个双引号位置out+=s[j];out+="\n";cnt++;i=index+1;}else if(s[i]==' ')<span style="white-space:pre"></span>//如果是空格,加入回车,计数加一{out+="\n";cnt++;}elseout+=s[i];}if(s[s.size()-1]!=char(34))//如果以双引号结尾,cnt即为参数数目,但相反的情况需要cnt+1cnt++;cout<<cnt<<endl;cout<<out<<endl;//system("pause");return 0;}


0 0
原创粉丝点击