虽然循环不允许我正确解析字符串
问题描述:
我正在写一个程序,它获取用户的字符串输入并通过空格解析它。虽然循环不允许我正确解析字符串
由于程序需要,直到用户输入“退出”重复接收用户输入,我把我所有的代码在如下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];
+1
谢谢。它现在完美。 – Amir
您可以使用正则表达式和拆分空间。 – Bill
'ostream :: operator >>()'在空格处停留字符。变量'command'中不会有''''。 – timrau