1. 程式人生 > >一道引數解析程式設計題,

一道引數解析程式設計題,

題目不難,但我遇到了一些問題,除錯了一會,故在此標記

解析規則: 

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();
    }
}