zoukankan      html  css  js  c++  java
  • 括号的匹配(表达式的合法性检查)

    【问题描述】

    假设一个表达式由英文字母(小写)、运算符(+、-、*、/)和左右小(圆)括号构成,以“@”作为表达式的结束符。
    请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“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;
    }
    
  • 相关阅读:
    数据挖掘笔记(2018-03-22发布于知乎)
    使用Graphlab参加Kaggle比赛(2017-08-20 发布于知乎)
    大数据笔记
    2018网易游戏数据挖掘实习生笔试面经
    数据库课程设计之图书借阅管理系统
    居中
    lucene
    eclipse中使用git
    yii
    工作总结
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12339449.html
Copyright © 2011-2022 走看看