gpt4 book ai didi

通过归档的 C++ 优先级

转载 作者:行者123 更新时间:2023-11-30 02:32:49 29 4
gpt4 key购买 nike

我想在优先读取归档后解决这种类型的表达式
2+3/5*9+3-4
这是我尝试解决该任务的代码我该如何解决这个问题

while ( !inputFile.eof() ) {
getline( inputFile, read );
cout << read << endl;
for ( int i = 0; i < read.length(); i++ ) {
if ( read[i] == '/' ) {
result = static_cast<float>(read[i - 1]) / static_cast<float>(read[i + 1]);
read[i - 1] = result;
for ( int j = i; j < read.length() - 2; j++ ) {
read[j] = read[j + 2];
}
read[read.length() - 1] = '\0';
read[read.length() - 2] = '\0';
}
}
cout << result << endl;
cout << read << endl;
}

最佳答案

您需要根据您的输入构建一个树状结构。首先,您需要对等式进行 lex(/tokenize),以便获得列表/数组/您认为适合您的标记(数字、运算符、括号)的任何容器。这些可能已经拥有正确的数据类型(数字等的 float 或 int)。

然后您可以使用正确的优先级将您的标记解析为树状结构。这是构建类似计算器的应用程序的棘手部分。

基本上你在这里解析语法,但你应该自己考虑一下(这是一个很好的做法)。

2+3/5*9+3-4 的树结构需要如下所示:

MINUS
|- PLUS
| |- PLUS
| | |- 2
| | |- MULTIPLY
| | | |- DIVIDE
| | | | |- 3
| | | | |- 5
| | | |- 9
| |- 3
|- 4

关于通过归档的 C++ 优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36005163/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com