我应该编写一个程序,将一个算术表达式作为输入。程序输出表达式是否包含匹配的分组符号,如果它是平衡的,它将计算表达式结果。
例如,算术表达式
{25 + (3 – 6) * 8}
是平衡的,其结果等于1
。
7 + 8 * 2
是平衡的,其结果等于23
。
但是,表达式5 + {(13 + 7) / 8 - 2 * 9
不包含匹配的分组符号,因此我们不会计算其结果。
使用哪种最佳数据结构(链表,堆栈等)?
答案 0 :(得分:2)
使用堆栈。最后打开的括号应该是第一个被关闭的括号。
从左到右开始表达。
继续将左括号推入堆栈。
当你找到一个右括号时,检查它是否等于堆栈的顶部(最后打开应该先关闭),如果是,则将其弹出。如果没有,则表达式不平衡。
如果堆栈末尾为空,则表达式是平衡的。
答案 1 :(得分:0)
#include <iostream>
#include
使用命名空间标准;
int main(){
string str;
cout <<“输入字符串:”;
std :: getline(std :: cin,str);
bool flag = true;
stack st;
for(int i = 0; i if((str.at(i)> ='0'&& str.at(i)<='9')|| str.at(i)=='+'|| str.at(i )=='-'|| str.at(i)=='/'|| str.at(i)=='*'|| str.at(i)==''){ // cout << str.at(i)<<“来了” << endl; 继续; } if(str.at(i)=='{'|| str.at(i)=='('){ st.push(str.at(i)); } 否则if(!st.empty()&&((st.top()=='{'&& str.at(i)=='}')||(st.top()=='( '&& str.at(i)==')'))) st.pop(); 其他{ flag = false; 休息; } } if(!st.empty()){ cout <<“与” <<“ \ n”不匹配; }其他{ if(flag) cout <<“匹配” <<“ \ n”; 其他 cout <<“与” <<“ \ n”不匹配; } 返回0; }