首页 > 解决方案 > 如何在 C++ 中实现分号结束输入?

问题描述

如何实现一个命令行界面,命令必须以分号结尾。然后回车执行。否则,按回车换行。如果我描述的不是很清楚,你可以参考mysql命令行。

如何在 C++ 中实现上述内容?例如:

如果用户输入foo;bar然后str = "foo". 它之间可以有一些空格;

在 C++ IO 中,我只知道:

#include <iostream>
#include <string>
using namespace std;
int main() {
 string str;
 cin >> str;
}

我不知道如何实现其他输入功能。

标签: c++

解决方案


最简单的方法是使用std::getline(如评论中的建议),但使用自定义分隔符(';'在您的情况下),如下所示:

string command;
while (getline(cin, command, ';')) {
    // process the command there
}

但是,这种方法有几个缺点并且非常有限:

  • 它读取直到任何';'被击中。如果您要处理足够复杂的命令以支持字符串文字,那么您将需要更复杂的解析来处理这个:echo "Hello; sample text"; exit;,作为两个命令,但不是三个;
  • 当您按 Enter 时,getline将等待更多输入,直到看到分号,但它不会插入任何“用户友好”提示,例如> 让用户知道他们需要提供更多输入或他们忘记了最后的分号命令的。

如果您可以在不支持这些功能的情况下使用,getline那就很好了。否则,您需要自己解析输入行。


推荐阅读