IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 栈之括号匹配问题 -> 正文阅读

[C++知识库]栈之括号匹配问题

习题1:括号匹配问题

问题简单描述:

本来( )这两个括号是成对存在的,如果遇到出现不成对情况,并且成对的括号是以(左括号在前,)右括号在后成对存在的,连续单独出现左括号、右括号或者左括号里面夹杂不合理的左右括号都是错误信息。也就是当出现一个右括号,栈里面必须由个左括号进行匹配,否则失败。

问题解题思路:

?

下面来说一下具体的代码设计:

我先把之前做的栈设计成一个动态库,这样我们直接可以调用栈里面的所有方法

关于怎么设计成动态库,可以参考我之前的文章linux之动态库与静态库。

好了话不多说,上代码。

先把之前做的栈设计成库,这里就用栈的顺序存储吧。

先把头放到我自己的库文件位置下面:

在把stack.c做成动态库放到我自己的库文件位置下面:

?

然后来看业务逻辑代码:

main.c

#include <stdio.h>
#include <stdlib.h>
#include "stack.h"


int main() {
	//用于接收我们需要判断的字符序列,稍微设计大一点避免溢出
	char str[100] = { '\0' };
	//创建一个栈
	t_seq_stack *stack = create_stack();
	while(scanf("%s",str) != EOF && stack != NULL) {
		//数组循环角标
		int index = 0;
		//如果出现前面前面都匹配成功,最后一个是‘)’,
		//那么就会造成一种,也会造成栈为空,因此给一个标识,出错,就是flag = 1
		//在结合栈是否为空就可以做出判断是否序列出错
		int errFlag = 0;
		while(str[index] != '\0') {
			//这里只要等于(左括号直接入栈
			if(str[index] == '(') {
					push_stack(stack,str[index]);
			} else if(str[index] == ')') {
				//当等于右括号的时候,判断栈是否有元素,
				//有出栈,没有出错让errFlag = 1,循环结束
				if(is_empty(stack)) {
					errFlag = 1;//说明出错了
					break;
				} else {
					pop_stack(stack);
				}
			}
			index++;
		}
		//当循环结束,只要栈里面还有数据,依旧是错的,说明左括号没与
		//右括号匹配成功,然后出栈。同时考虑边界情况,假如最后一个是)
		//前面都正常匹配出栈,数组循环完毕,但是也没有报错,栈为空
		//所以去匹配errFalg
		if(is_empty(stack) && errFlag == 0) 
			printf("序列成功\n");
		else {
			printf("序列出错\n");
		}
	}
	return 0;
}

运行结果:

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 00:58:09  更:2022-02-19 00:59:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:49:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码