一道引數解析程式設計題,
題目不難,但我遇到了一些問題,除錯了一會,故在此標記
解析規則:
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();
}
}