题目不难,但我遇到了一些问题,调试了一会,故在此标记
解析规则:
1.参数分隔符为空格
2.对于用“”包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” “d:\”时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\program,注意输出参数时,需要将“”去掉,引号不存在嵌套情况。
3.参数不定长
#include <iostream>
#include<queue>
#include<stdio.h>
using namespace std;
int main()
{
string a,b;int sum=0;int num=0;
int flag=0;int i=3;
queue<string> q;int w;
while(cin>>a)
{
num++;
if((w=a.find("\""))>=0)//注意此处赋值给w;否则单一find找不到,并不是-1,而是大的正数(应该和无符号表示有关),赋给有符号的int型,就会是-1
{
if(a[0]=='\"')
{
flag=num;
b=a;
sum++;
}
if(a[a.size()-1]=='\"')
{
if(flag!=num)
{
b+=" ";b+=a;
}
b.erase(b.begin());
b.erase(b.end()-1);//去引号,用substr也可,substr(1,b.size()-2),这时b可能比较大,浪费时间,可在前面检测到带有引号的字符串时就去掉
q.push(b);
flag=0;
//cout<<"b:"<<b<<endl;
b.clear();
}
}
else
{
if(flag)
b+=a;
else
{
q.push(a);sum++;
}
}
}
cout<<sum<<endl;
while(!q.empty())
{
cout<<q.front()<<endl;
q.pop();
}
}