适当的数据结构,用于匹配分组符号
Appropriate data structure for matching grouping symbols?
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;
}
- C++模板函数,用于比较任何无符号整数和有符号整数
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- C++,概念不适用于无符号整数作为结果类型?
- 用于删除符号并生成排列的算法
- 项目符号 3 动力学不适用于非球体
- 自动符号转换,用于对类等数学向量进行操作
- 是否有 GCC 警告,用于使用 C 库中的符号而不是通过命名空间 std?
- Opencv 未定义的符号用于架构 cv:imwrite Mac osX high Sierra.
- C :用于体系结构错误的经典未定义符号
- CLang++ 链接器未定义的符号用于体系结构x86_64
- 无符号函数,用于返回使用任何数字的数字
- mac构建有一个未定义的符号,而linux构建并没有用于相同的代码
- 用于在2个带符号整数区间之间进行除法的C++算法
- 用于架构x86_64的未申报标识符和未定义的符号
- 未解决的外部符号C 用于继承和构造函数
- ld:1 个重复符号用于架构x86_64 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- Python ImportError-未定义的符号-用于自定义C++模块