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

Appropriate data structure for matching grouping symbols?

本文关键字:符号 用于 数据结构      更新时间:2023-10-16

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

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

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

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

使用的最佳数据结构(链接列表,堆栈等)是什么?

使用堆栈。最后一个打开的括号应该是第一个关闭的括号。

从左到右开始以进行表达。

继续将打开括号推到堆栈上。

当您找到闭合括号时,请检查它是否等于堆栈的顶部(最后打开应首先关闭),如果是的话,请将其弹出。如果不是,则表达式不平衡。

如果堆栈在末尾是空的,则表达式是平衡的。

#include <iostream>

#include

使用命名空间std;

int main(){

字符串str;

cout&lt;&lt;&quot"输入字符串:; quot";

std :: getline(std :: cin,str);

bool flag = true;

stack st;

for(int i = 0; i&lt; str.size(); i ){

if(((str.at(i)&gt; ='0'&amp;&amp;&amp; str.at(i)&lt; ='9')|| str.at(i)==' '||str.at(i)==' - '|| str.at(i)=='/'|| str.at(i)=='*'*'*'|| str.at(i)==''){

//cout&lt;&lt; str.at(i)&lt;&lt;

继续;

}

if(str.at(i)=='{'|| str.at(i)=='('('){

st.push(str.at(i));

}

else if(!st.St.Empty()&amp;&amp;(st.top()=='{'{'&amp;&amp;&str.at(i)=='}')||(St.Top()=='('&amp;&amp; str.at(i)==')'))

st.pop();

else {

flag = false;

休息;

}

}

if(!st.empty()){

cout&lt;&lt;&quord不匹配"

} else {

如果(flag)

cout&lt;&lt;&quot'

其他

cout&lt;&lt;&quord不匹配"

}

返回0;

}