欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

括号的匹配(表达式的合法性检查)

发布时间:2024/4/30 编程问答 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 括号的匹配(表达式的合法性检查) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

【问题描述】

假设一个表达式由英文字母(小写)、运算符(+、-、*、/)和左右小(圆)括号构成,以“@”作为表达式的结束符。
请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。
假设表达式长度小于255,左圆括号少于20个。

【算法分析】

假设输入的字符串存储在c中(char c[256])。
可以定义一个栈:char s[maxn+1];int top;
用它来存放表达式中从左往右的左圆括号(maxn=20)。

【算法思路】

顺序(从左往右)扫描表达式的每个字符c[i],若是“( ”,则让它进栈;若遇到的是“)”,则让栈顶元素出栈;
当栈发生下溢或当表达式处理完毕而栈非空时,都表示不匹配,返回“NO”;否则表示匹配,返回“YES”。

【代码分析】

#include <cstdio> #include <cstdlib> #define maxn 20 using namespace std; char c[256]; bool judge(char c[256]) {int top=0,i=0;while(c[i]!='@'){if(c[i]=='(') top++;if(c[i]==')'){if(top>0) top--;else return false;}i++;}if(top!=0) return false;//检查栈是否为空,不空则说明有未匹配的括号。else return true; } int main () {scanf("%s",c);if(judge(c)) printf("YES");else printf("NO");return 0; }

总结

以上是生活随笔为你收集整理的括号的匹配(表达式的合法性检查)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。