虽然循环不允许我正确解析字符串
While loop does not allow me parse an string correctly
我正在编写一个程序,该程序获取用户的字符串输入并通过空格对其进行解析。
由于程序需要重复接收用户输入,直到用户进入"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];
相关文章:
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- std::带有自定义缓冲区的 iostream 不允许我写入
- Visual Studio 2017 不允许我创建 C++ 专用模板
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 为什么在指向对象的迭代器上调用函数不允许我更改对象本身?
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- C++ 我的开关格式中的循环不允许我显示菜单选项或接受输入?
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- 为什么Visual Studio(2017;15.7.5)不允许我更改c ++关键字颜色
- HTTP POST 请求不允许我定义上下文类型
- 如何创建一个接口,允许我访问C++中的按钮(和其他ui)函数,该函数是使用python中的MFC实现的
- Bazel 允许我包含来自全局安装库的标头
- 为什么Visual Studio允许我在模板函数中使用私有成员(C++)?
- 新版本的 SDL 不允许我使用SDL_image
- 为什么C++不允许我在类中使用字符串作为数据成员?
- 为什么此代码不允许我接收整个数组?
- 为什么不允许我将函数返回 const char* 的结果分配给 char*,bt 可以将字符串文字(常量)分配给 cha
- 虽然循环不允许我正确解析字符串
- Android NDK Eclipse CDT 不允许我使用 substr 方法的字符串