裸题:BM49 表达式求值利用中缀转后缀,后缀求值思路
// 代码已ac
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
int solve(string s) {
// 中缀转后缀,后缀进行求值
vector<string> data = to_houzhui(s);
for(auto str : data){
cout << str << " ";
}
cout << endl;
return houzhui_to_value(data);
}
// 中缀转后缀
/*
思路:
遇到数字就将数字添加到字符串中
// 运算压栈与弹栈规则
压栈规则:
1. 如果是(, 直接压栈
2. 如果栈顶元素为+或-,运算符直接压栈(**大于等于**当前栈顶优先级的运算符直接压栈)
弹栈规则:
1. 如果是), 弹出所有(之前的元素
2. 如果当前栈顶元素优先级大于当前待压栈运算符,弹栈(弹出比当前待压栈运算符优先级**大于等于**的运算符)
*/
vector<string> to_houzhui(string str){
int index = 0, size = str.size();
stack<char> stack_symbol;
vector<string> ans;
while(index < size){
char ch = str[index];
if(ch == '(' || ch == '*' || ch == '/'){
// 优先较高的
stack_symbol.push(ch);
++index;
}else if(ch == ')') {
// 不断弹出符号栈,直到遇到'('
while(!stack_symbol.empty
中缀表达式转换与求值算法实现

这篇博客详细介绍了如何实现中缀表达式转换为后缀表达式,并利用后缀表达式进行求值的过程。算法包括中缀转后缀、后缀求值,涉及运算符的优先级和括号处理。代码已通过验证,能够正确处理表达式的计算。
最低0.47元/天 解锁文章
1542

被折叠的 条评论
为什么被折叠?



