虽然循环不允许我正确解析字符串

While loop does not allow me parse an string correctly

本文关键字:字符串 允许我 循环 不允许      更新时间:2023-10-16

我正在编写一个程序,该程序获取用户的字符串输入并通过空格对其进行解析。

由于程序需要重复接收用户输入,直到用户进入"exit",因此我将所有代码放入 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

我该怎么办?

这是因为

您正在使用读取字符串

cin >> command;

>>运算符在空格处停止,因此您的命令最终没有空格。循环的下一次迭代拾取第一个参数并尝试解析它;然后下一次迭代对最后一个参数执行相同的操作。

可以通过改用std::getline来使代码正常工作:

getline(cin, command);

但是执行相同操作的更简单方法是正确使用运算符>>

cin >> parsedStr[0];
cin >> parsedStr[1];
cin >> parsedStr[2];
相关文章: