2013-10-02 69 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