用于匹配分组符号的适当数据结构?

时间:2015-05-10 01:08:42

标签: c++ data-structures

我应该编写一个程序,将一个算术表达式作为输入。程序输出表达式是否包含匹配的分组符号,如果它是平衡的,它将计算表达式结果。

例如,算术表达式  {25 + (3 – 6) * 8}是平衡的,其结果等于1

7 + 8 * 2是平衡的,其结果等于23

但是,表达式5 + {(13 + 7) / 8 - 2 * 9不包含匹配的分组符号,因此我们不会计算其结果。

使用哪种最佳数据结构(链表,堆栈等)?

2 个答案:

答案 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;

}