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

我应该怎么办?

4

1 回答 1

3

这是因为您正在使用

cin >> command;

运算符停在空格处,因此您的>>命令最终没有空格。循环的下一次迭代获取第一个参数并尝试解析它;然后下一次迭代对最后一个参数做同样的事情。

您可以通过使用来使您的代码工作std::getline

getline(cin, command);

但更简单的方法是正确使用>>运算符:

cin >> parsedStr[0];
cin >> parsedStr[1];
cin >> parsedStr[2];
于 2013-10-02T12:48:10.277 回答