应如何将输入字符串读取到调车场算法计算器中
How should an input string be read into a shunting yard algorithm calculator?
我已经实现了调车场算法的基本结构,但我不知道如何读取多位数或函数值。以下是我目前要阅读的价值观:
string input;
getline(cin, input);
input.erase(remove_if(input.begin(), input.end(), ::isspace), input.end());
//passes into function here
for (int i = 0; i < input.length(); ++i) {
string s = input.substr(i, 1);
//code continues
}
正如您所看到的,这种方法一次只能解析一个字符,因此它存在极大的缺陷。我也尝试过搜索读入值或解析它们,但在这里没有找到相关的结果。
完整代码:https://pastebin.com/76jv8k9Y
为了运行调车场,您需要首先标记您的字符串。也就是说,把12+4
变成{'12','+','4'}
。然后你可以使用代币运行调车场。一个天真的中缀词法算法可能是这样的:
lex(string) {
buffer = ""
output = {}
for character in string {
if character is not whitespace {
if character is operator {
append buffer to output
append character to output
buffer = ""
} else {
append character to buffer
}
}
append buffer to output
return output
}
真正的lexer要复杂得多,是编译器设计中的一个主要研究领域。
相关文章:
- 在C++中手动调整数组大小
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 架构决策:返回std::future还是提供回调
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 为什么我的排序算法会更改数组值
- 求最大元素位置的分治算法
- 具有功能支持的调车场算法
- 在三元字符串中处理一元NOT运算符的调车场算法
- 试图理解调车场算法
- 在调车场处理带括号的表达式