2013-10-02 67 views
1

我正在寫一個程序,它獲取用戶的字符串輸入並通過空格解析它。雖然循環不允許我正確解析字符串

由於程序需要,直到用戶輸入「退出」重複接收用戶輸入,我把我所有的代碼在如下while循環:

while(cont == true) 
{ 
    cin>>command; 
    string parsedStr[3]; 
    parsedStr[0] = ""; 
    parsedStr[1] = ""; 
    parsedStr[2] = ""; 
    int j = 0; 

    for(i=0; i<command.size(); i++) 
    { 
     if (command[i] == ' ') 
     { 
      ++j;     
     } 
     parsedStr[j] += command[i]; 
    } 

    cout<<"Command: "<<parsedStr[0]<<"\n"; 
    cout<<"Argument 1: "<<parsedStr[1]<<"\n"; 
    cout<<"Argument 2: "<<parsedStr[2]<<"\n"; 

    /* do my desired operations according to the received command */ 
} 

然而,這是當我輸入一個命令,如「執行12 345」,它會顯示如下的結果和不分析的論點:

Command: execute 
Argument 1: 
Argument 2: 
Command: 12 
Argument 1: 
Argument 2: 
Command: 345 
Argument 1: 
Argument 2: 

但是當我移動解析器出while循環,它完美的作品,並打印出以下內容:

Command: execute 
Argument 1: 12 
Argument 2: 345 

我該怎麼辦?

+0

您可以使用正則表達式和拆分空間。 – Bill

+0

'ostream :: operator >>()'在空格處停留字符。變量'command'中不會有''''。 – timrau

回答

3

這是因爲你正在閱讀使用

cin >> command; 

>>運營商停止在空間,讓您的命令,在它沒有空格結束的字符串。循環的下一個迭代選取第一個參數並嘗試解析它;那麼下一次迭代與最後一個參數一樣。

您可以通過使用std::getline,而不是讓你的代碼工作:

getline(cin, command); 

但更簡單的方法做同樣的事情就是用>>操作正確:

cin >> parsedStr[0]; 
cin >> parsedStr[1]; 
cin >> parsedStr[2]; 
+1

謝謝。它現在完美。 – Amir