使用栈检查括号的合法性 C 实现

这篇具有很好参考价值的文章主要介绍了使用栈检查括号的合法性 C 实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用栈检查括号的合法性
思路讲解:首先从数组数组0下标开始,如果是左括号直接无脑压入栈,直到出现右括号开始判断合法与否。遇到右括号分两种情况,第一种是空栈的情况,也就是说我们第一个字符就是右括号,那么我们可以直接判定为非法,返回false退出;第二种情况是前面压入了一堆的左括号,终于碰上了一个右括号,我们需要判定的是这个右括号是否和最近的左括号匹配,也就是是否和栈顶存的左括号匹配【注意这里的栈永远只会存入左括号】,如果匹配,则执行【栈里面的左括号】出栈操作,相当于消除了一对括号,后续执行循环依次操作,如果每对括号都能消除,到最后栈会变成空栈,那就代表这一堆的括号都是合法的,那就输出success,如果没把栈排空,就说明匹配不成功,则输出failure,表明括号不合法。
使用栈检查括号的合法性 C 实现,算法,c语言,算法,开发语言文章来源地址https://www.toymoban.com/news/detail-701464.html

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<stdlib.h> 
#include<stack>// stack from standard template library(STL)
using namespace std;

bool Check (char C[],int length){
	stack<char> S;
	
	for(int i=0;i<length;i++){
		if(C[i] == '('||C[i] == '['||C[i] == '{')
		{
			S.push(C[i]);
			
		}
		
		else if(C[i] == ')'||C[i] == ']'||C[i] == '}'){
			if(S.empty())
			{
				printf("空栈进右括号必错,不合法\n");
				return false;
			}
			
			else 
				if(C[i] == ')'&&S.top() == '(') S.pop();
				
				if(C[i] == ']'&&S.top() == '[') S.pop();
				
				if(C[i] == '}'&&S.top() == '{') S.pop();
				
			
		}
	}
	return S.empty();
}
int main(){
	char C[51];
	printf("Enter a string: ");
	gets(C);
	
	if(Check(C,strlen(C)))
	printf("success!");
	else
	printf("failure!");
	
}

到了这里,关于使用栈检查括号的合法性 C 实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何用Java校验SQL语句的合法性?有这5种解决方案

    要在Java中校验SQL语句的合法性,可以使用JDBC API中提供的Statement接口的 execute() 方法。这个方法会尝试执行给定的SQL语句,如果SQL语句不合法,则会抛出一个SQLException异常。因此,我们可以利用这个异常来判断SQL语句的合法性。 以下是一个简单的示例代码: 在这个示例代码中

    2024年02月07日
    浏览(29)
  • ViewUI表格Table嵌套From表单-动态校验数据合法性的解决方法

    项目需求:在表格中实现动态加减数据,并且每行表格内的输入框,都要动态校验数据,校验不通过,不让提交数据,并且由于表格内部空间较小,我仅保留红边框提示,文字提示给隐藏了,不然表格内的框会很大很难看。 如果,你需要提示的话,不要 show-message 属性 提示:

    2024年02月13日
    浏览(31)
  • 【java】合法括号序列判断与Fibonacci数列

    目录 🔥编程题 1.合法括号序列判断 2.Fibonacci数列   1.合法括号序列判断 链接:合法括号序列判断__牛客网 (nowcoder.com) 给定一个字符串 A 和其长度 n ,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。 测试样例: \\\"(()())\\\",6 返回:true 测试样例: \\\"()a()()\\\",

    2023年04月23日
    浏览(21)
  • C语言经典算法之括号匹配算法

    目录 前言 A.建议 B.简介 一 代码实现 二 时空复杂度 A.时间复杂度分析 B.空间复杂度分析 三 优缺点 A.优点: B.缺点: 四 现实中的应用 1.学习算法最重要的是理解算法的每一步,而不是记住算法。 2.建议读者学习算法的时候,自己手动一步一步地运行算法。 tips:文中的(如

    2024年02月21日
    浏览(28)
  • 刷题笔记之四(Fibonacci数列+合法括号序列判断+跳石板+幸运的袋子+两种排序方式+最小公倍数)

    目录 1. Math类是封装了常用的数学运算 2. Object类的12种常用方法 3. Fibonacci数列 4. 合法括号序列判断 5. 子类父类trycatch调用 6. 跳石板 7. 幸运的袋子 8.跳出forEach循环break 9 .java为后缀的文件中,只能有一个public修饰并且文件名相同的类 10. a++先使用后++ 11. 两种排序方式 12. 最小公

    2024年02月21日
    浏览(24)
  • C语言 数据结构--栈 括号匹配算法

    今天这一期使用栈来完成括号匹配算法 ① 栈结构 ② 初始化栈 ③ 入栈 ④ 出栈 ⑤ 判断栈是否为空 ⑤ 括号匹配 完整代码: 结果: (1)括号序列为char str[]={\\\'(\\\',\\\'{\\\',\\\'[\\\',\\\']\\\',\\\'}\\\',\\\')\\\'}; (2)括号序列为char str1[]={\\\'{\\\',\\\'(\\\',\\\'}\\\',\\\']\\\'};    

    2024年02月05日
    浏览(38)
  • Matlab错误:表达式无效。请检查缺失的乘法运算符、缺失或不对称的分隔符或者其他语法错误。要构造矩阵,请使用方括号而不是圆括号。

    错误:表达式无效。请检查缺失的乘法运算符、缺失或不对称的分隔符或者其他语法错误。要构造矩阵,请使用方括号而不是圆括号。 原因:选中了matlab右侧工作区的变量空间,叉掉去即可。  

    2024年02月16日
    浏览(48)
  • 用栈实现括号匹配算法(超详细,超易懂)

     首先我们要明白栈是如何实现这个算法的,在实现算法的过程当中, 栈的作用就是储存左括号,例如储存\\\"[\\\" \\\"}\\\"  \\\'(\\\" 这三种左括号 在程序当中,首先遍历传入的算数组,剔除一些其他的数字,在这里只比较左右括号,然后先将左括号储存到栈当中,例如(((( ] ] ],先将

    2024年02月06日
    浏览(35)
  • 【数据结构】C语言实现顺序栈 && OJ题 —— 有效的括号

    👑作者主页:@进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:数据结构

    2024年02月10日
    浏览(34)
  • R语言基础 | 使用中括号“[]”提取或替换数据

    专注系列化、高质量的R语言教程 (查看推文索引 ) 中括号 [] 是R语言的一个常用操作符,作用是提取(extract)或替换(replace)。本篇推文总结其三种用法: 1 使用下标或名称 2 使用逻辑变量 3 使用重复序数 在推文R语言的原子类型和数据结构中,学堂君介绍了五种基本数据

    2024年02月12日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包