标记字符串以存储值的好方法?或替代用户输入
Good way to tokenize a string to store values? Or alternative for user input
再次问你好,Stackoverflow,我再次在这里为我的C++编程课提出一个问题。我面临的问题主要是由于用户从键盘输入。我需要能够接受用户输入来决定调用什么函数以及给函数什么参数。例如,像add 5
这样的东西会使用参数 5 调用 add 函数。起初,我尝试重载>> 运算符以同时获取字符串和 int,但我遇到的问题是程序无法在没有 int 的情况下进行输入,例如 deletemax
所以我不得不抛弃这个想法。所以现在我又回到了标记输入,但我们不允许在这个程序中使用 Boost,所以我使用 sstream 想出了这样的东西
bool out = false;
string token;
string In;
int num;
do
{
cout << "heap> ";
cin >> In;
istringstream iss(In);
while(getline(iss, token, ' '))
{
cout << token << endl; //I know this is incorrect but just not what to replace it with
}
out = ProcessCommand (token, num); //Takes string and int to call correct functions
} while (out != true);
问题在于我不太确定如何正确标记字符串,以便我可以得到 2 个字符串并将第二个字符串转换为 int。谁能给我一些帮助?我将不胜感激。此外,如果有比我尝试的更好的方法,我也想听听。
感谢您给我的任何帮助。
谷歌搜索"C++字符串标记化"会给你带来很多点击,第一次点击是在Stackoverflow上。但你应该试一试。我猜这是练习的重点。
您说"argumentS",这表明您支持的命令需要不同数量的参数。我会这样分解它:
- 从用户那里读取一行
- 在空间边界上将行拆分为"令牌",将令牌存储在列表中
- 根据列表中的第一个令牌,选择要执行的命令
- 将令牌列表传递给命令,以便它可以将它们验证/解释为参数
棘手的部分是#2。您知道容器类吗?您可以使用vector<string>
来存储您解析的区块。若要执行实际分析,请循环访问字符串的字符。跳过空格,直到找到非空格字符(或字符用完)。保存此位置:start
。然后跳过非空格,直到找到空格(或字符用完)。保存此位置:end
。复制从 start
到 end
之间表示的子字符串,并将其复制到令牌列表中。
如果您以前从未做过,那么制定这方面的实际细节,确保您没有错误等将具有挑战性,我猜这就是重点。
您不需要一次读取整个用户输入。
例如,您可以读取用户输入的第一位(操作、add
或deletemax
等)。从那里根据操作,您可以继续从输入中读取参数(在add
的情况下)或立即开始执行操作(在deletemax
的情况下)。
一种方法是将函数名称std::map
作为键,并将所需数量的参数作为值。您将读取一行输入,获取函数名称,然后决定是否需要附加参数。我会编写一个函数,该函数将返回从字符串流或空向量中提取的vector
参数,以防输入无效。
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 用户定义函数中的指针和输入
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 在C++中,我如何接受不同于同一行的用户输入
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 当用户键入分隔符时,停止getline()输入
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 显示基于用户输入的整数的字符
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 如果用户没有输入任何内容或输入错误,如何重新输入用户的输入?
- 为什么在代码块中执行时会跳过输入用户输入的行?
- 使用 for 循环在数组中输入用户