[牛客習題]參數解析

題目描述

在命令行輸入以下命令:ios

xcopy /s c:\ d:\ide

各個參數以下:
參數1:命令字xcopy
參數2:字符串/s
參數3:字符串c:\
參數4: 字符串d:\
請編寫一個參數解析程序,實現將命令行各個參數解析出來。




spa

解析規則: 命令行

  • 1.參數分隔符爲空格
  • 2.對於用「」包含起來的參數,若是中間有空格,不能解析爲多個參數。好比在命令行輸入xcopy /s 「C:\program files」 「d:\」時,參數仍然是4個,第3個參數應該是字符串C:\program files,而不是C:\program,注意輸出參數時,須要將「」去掉,引號不存在嵌套狀況。
  • 3.參數不定長
  • 4.輸入由用例保證,不會出現不符合要求的輸入

輸入描述:code

輸入一行字符串,能夠有空格ci

輸出描述:字符串

輸出參數個數,分解後的參數,每一個參數都獨佔一行get

示例1
輸入
string

xcopy /s c:\ d:\it

輸出

4
xcopy
/s
c:\
d:\



#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str;
    while(getline(cin, str))
    {
        //先統計輸出參數的個數
        int count = 0;
        int size = str.size();
        for(int i = 0; i < size; ++i)
        {
            if(str[i] == ' ')
                count++;
            //對‘」’進行特殊處理
            if(str[i] == '"')
            {
                do{
                    i++;
                }while(str[i] != '"');
            }
        }

        cout << count+1 << endl;

        //用flag表示是否含雙引號,0表示有雙引號
        //注意:雙引號中的空格要打印出來
        //這裏採用異或來操做flag的值, 兩個雙引號能夠使其復原
        int flag = 1;
        for(int i = 0; i < size; ++i)
        {
            //有雙引號,flag經過異或變爲0,下一次再遇到雙引號flag變爲1
            if(str[i] == '"')
                flag ^= 1;
            //打印有效元素
            if(str[i] != ' ' && str[i] != '"')
                cout << str[i];
            //打印雙引號內的空格,是否有雙引號已用flag標記
            if(str[i] == ' ' && (!flag))
                cout << str[i];
            //遇到雙引號外面的就換行
            if(str[i] == ' ' && flag)
                cout << endl;
        }
        cout << endl;
    }
    return 0;
}
相關文章
相關標籤/搜索