C语言解决堆栈括号匹配问题示例详解

目录
  • 首先构建栈
  • 调用匹配函数
  • 代码调用

1.括号匹配问题就是当遇到{( [这些左括号的时 将括号字符入栈

2.当遇到右括号时判断栈顶元素是不是与左括号匹配如果匹配就出栈

如果不匹配就直接结束程序(即括号匹配失败)

首先构建栈

struct STACK
{
	char num[10];
	int top;
};
struct STACK* creatstack()
{
	struct STACK* stack = new struct STACK;
	assert(stack);
	stack->top = -1;//0 -1这些根据直接所习惯去标记栈顶 -1只是先置加 0后置加
	return stack;
}
void push(struct STACK* stack, char ch)
{
	stack->num[++stack->top] = ch;

}
void pop(struct STACK* stack)
{
	stack->top--;
}

调用匹配函数

如果返回true即匹配成功 返回false即匹配失败

bool Match(struct STACK* stack, char* match)
{
	int len = strlen(match);
	for (int i = 0; i < len; ++i)
	{
		if (match[i] == '{' || match[i] == '[' || match[i] == '(')
		{
			push(stack, match[i]);
		}
		if (match[i] == '}' )
		{
			if (stack->num[stack->top] == '{')
			{
				pop(stack);
			}
			else
			{
				return false;
			}
		}
		if (match[i] == ')' )
		{
			if (stack->num[stack->top] == '(')
			{
				pop(stack);
			}
			else
			{
				return false;
			}
		}
		if (match[i] == ']' )
		{
			if (stack->num[stack->top] == '[')
			{
				pop(stack);
			}
			else
			{
				return false;
			}
		}
	}
	if (stack->top == -1)
		return true;
	else
	{
		return false;
	}
}

代码调用

如果是输出1说明匹配成功 输出0匹配不成功

int main()
{
	struct STACK* stack = creatstack();
	char str[10] = "()[][]{}";
	cout << Match(stack ,str)<< endl;
}

以上就是C语言堆栈括号匹配问题示例详解的详细内容,更多关于C语言堆栈括号匹配的资料请关注我们其它相关文章!

(0)

相关推荐

  • C语言数据结构之模式匹配字符串定位问题

    C语言数据结构之模式匹配字符串定位问题 主要实现了三种字符串的模式匹配,主要包括字符串子操作的集合,字符串指针回溯,和KMP算法 头文件  #ifndef INDEXHEAD_H_INCLUDED #define INDEXHEAD_H_INCLUDED #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLEN 255 typedef char Sstring[MAXLEN + 1

  • C语言实现括号匹配的方法

    1 要求 编写程序检查该字符串的括号是否成对出现,而且不能交叉出现. 输入: 一个字符串,里边可能包含"()"."{}"."[]"三种括号,"#"结束 输出: 成功:代表括号成对出现并且嵌套正确 失败:未正确使用括号字符. 2 分析 用一个栈,就能解决该问题,左括号栈顶字符必须和第一个入栈的右括号字符匹配. 栈介绍:栈是一种特殊的线性表,仅能在线性表的一端操作. 栈的特性:后进先出(LIFO) 由于正在学数据结构,于是栈的定义

  • C++中用栈来判断括号字符串匹配问题的实现方法

    本文实例主要实现:输入一个括号字符串,依次检验,若为左括号则入栈,若为右括号则出栈一个字符判断是否与之相对应,在最后还需判断栈是否为空,如果不为空则不匹配. 首先回顾栈的基本知识: 1.定义栈的结构体并初始化一个新栈: struct stack { char strstack[stacksize]; int top; }; void InitStack(stack &s) { s.top=-1; } 2.出栈和入栈操作: char Push(stack &s,char a) { if(s.

  • 使用C语言解决字符串匹配问题的方法

    最常想到的方法是使用KMP字符串匹配算法: #include <stdio.h> #include <stdlib.h> #include <string.h> int get_nextval(char *pattern, int next[]) { //get the next value of the pattern int i = 0, j = -1; next[0] = -1; int patlen = strlen(pattern); while ( i &l

  • C语言解决堆栈括号匹配问题示例详解

    目录 首先构建栈 调用匹配函数 代码调用 1.括号匹配问题就是当遇到{( [这些左括号的时 将括号字符入栈 2.当遇到右括号时判断栈顶元素是不是与左括号匹配如果匹配就出栈 如果不匹配就直接结束程序(即括号匹配失败) 首先构建栈 struct STACK { char num[10]; int top; }; struct STACK* creatstack() { struct STACK* stack = new struct STACK; assert(stack); stack->top

  • Go语言题解LeetCode268丢失的数字示例详解

    目录 题目描述 思路分析 AC 代码 异或两遍 - 丢失的数字 解题思路 代码 C++ 排序二分.加减法.异或 - 丢失的数字 解题思路: 题目描述 原题链接 : 268. 丢失的数字 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数. 示例 1: 输入:nums = [3,0,1] 输出:2 解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内.2 是丢失的数字,因为它没有出现在 nums 中. 示例 2

  • python实现括号匹配的思路详解

    1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[', ')': '(', '>': '<'} SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys() def check(s): arr = [] for c in s: if c in SYMBOLS_L: # 左符号入栈 arr.appe

  • Java 括号匹配问题案例详解

    目录 前言 例题 算法思想 算法举例 代码 栈类 括号匹配核心算法 完整代码 运行结果 前言 括号匹配问题算是栈应用中比较经典的问题了,在数据结构的书中还有各种考试中会出现.最近刷题的时候也遇到了,就想写一篇文章整理一下. 例题 题目来自Leetcode中国 给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效. 有效字符串需满足: 1.左括号必须用相同类型的右括号闭合. 2.左括号必须以正确的顺序闭合. 注意空字符串可被认为是有效字符串. 示例 1: 输入: "()"

  • Python+FuzzyWuzzy实现模糊匹配的示例详解

    目录 1. 前言 2. FuzzyWuzzy库介绍 2.1 fuzz模块 2.2 process模块 3. 实战应用 3.1 公司名称字段模糊匹配 3.2 省份字段模糊匹配 4. 全部函数代码 在日常开发工作中,经常会遇到这样的一个问题:要对数据中的某个字段进行匹配,但这个字段有可能会有微小的差异.比如同样是招聘岗位的数据,里面省份一栏有的写“广西”,有的写“广西壮族自治区”,甚至还有写“广西省”……为此不得不增加许多代码来处理这些情况. 今天跟大家分享FuzzyWuzzy一个简单易用的模糊字符

  • Go语言开发框架反射机制及常见函数示例详解

    目录 基本介绍 反射中常见函数和概念 reflect.TypeOf(变量名) reflect.ValueOf(变量名) 变量.interface{}和reflect.Value是可以相互转换的 基本使用 反射注意事项 反射的最佳实践 基本介绍 反射可以在运行时动态获取变量的各种信息,比如变量的类型,类别 如果是结构体变量,还可以获取到结构体本身的信息 通过反射,可以修改变量的值,可以调用关联的方法 使用反射,需要import("reflect") 示意图 反射中常见函数和概念 refl

  • C语言中文件常见操作的示例详解

    目录 文件打开和关闭 文件写入 文件读取 fseek函数 ftell函数 Demo示例 解决读取乱码 FILE为C语言提供的文件类型,它是一个结构体类型,用于存放文件的相关信息.文件打开成功时,对它作了内存分配和初始化. 每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节. 一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便. 文件打开和关闭 C语言的安全文件打开函数为_wfopen_s和_fopen_s

  • Go语言中的字符串处理方法示例详解

    1 概述 字符串,string,一串固定长度的字符连接起来的字符集合.Go语言的字符串是使用UTF-8编码的.UTF-8是Unicode的实现方式之一. Go语言原生支持字符串.使用双引号("")或反引号(``)定义. 双引号:"", 用于单行字符串. 反引号:``,用于定义多行字符串,内部会原样解析. 示例: // 单行 "心有猛虎,细嗅蔷薇" // 多行 ` 大风歌 大风起兮云飞扬. 威加海内兮归故乡. 安得猛士兮守四方! ` 字符串支持转义

  • Go语言基础设计模式之策略模式示例详解

    目录 概述 针对同一类型问题的多种处理方式 一.不使用策略模式 二.策略模式 UML 总结 示例 概述 定义一系列算法,将每个算法封装起来.并让它们能够相互替换.策略模式让算法独立于使用它的客户而变化. 针对同一类型问题的多种处理方式 一.不使用策略模式 package main import "fmt" type User struct { Name string } func (this User) travel(t string) { switch t { case "

  • Go语言基础函数基本用法及示例详解

    目录 概述 语法 函数定义 一.函数参数 无参数无返回 有参数有返回 函数值传递 函数引用传递 可变参数列表 无默认参数 函数作为参数 二.返回值 多个返回值 跳过返回值 匿名函数 匿名函数可以赋值给一个变量 为函数类型添加方法 总结 示例 概述 函数是基本的代码块,用于执行一个任务 语法 函数定义 func 函数名称( 参数列表] ) (返回值列表]){ 执行语句 } 一.函数参数 无参数无返回 func add() 有参数有返回 func add(a, b int) int 函数值传递 fu

随机推荐