一道参数解析编程题,

来源:互联网 发布:cydia软件源 big 编辑:程序博客网 时间:2024/06/10 01:50

题目不难,但我遇到了一些问题,调试了一会,故在此标记


解析规则: 

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

原创粉丝点击