c语言一串字符括号配对,C语言实现括号匹配的方法
1 要求
编写程序检查该字符串的括号是否成对出现,而且不能交叉出现。
输入:
一个字符串,里边可能包含“()”、"{}"、“[]”三种括号,“#”结束
输出:
成功:代表括号成对出现并且嵌套正确
失败:未正确使用括号字符。
2 分析
用一个栈,就能解决该问题,左括号栈顶字符必须和第一个入栈的右括号字符匹配。
栈介绍:栈是一种特殊的线性表,仅能在线性表的一端操作。
栈的特性:后进先出(LIFO)
由于正在学数据结构,于是栈的定义与操作都是自己编写的,为了巩固概念
3 代码
#include
#include
#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
#define bool int //自定义bool变量
#define SElemType char
typedef struct {
SElemType *base; //栈基地址
SElemType *top; //栈顶地址
int stacksize;
} SqStack;
//------基本操作的算法描述------
//构建一个空栈
bool InitStack(SqStack *S) {
S->base = (SElemType *) malloc(STACK_INT_SIZE * sizeof(SElemType)); //开辟新的空间
if (!S->base) return 0; //开辟失败返回0
S->top = S->base;
S->stacksize = STACK_INT_SIZE;
return 1;
}
//若栈不为空,返回栈顶元素,并返回true 否则返回 false
bool GetTop(SqStack S) {
if (S.top == S.base) return 0;
return *(S.top - 1);
}
//插入元素 为新的栈顶元素
bool Push(SqStack *S, SElemType e) {
if (S->top - S->base >= S->stacksize) //如果栈满 需要增加空间
{
S->base = (SElemType *) realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(SElemType));
if (!S->base) return 0;
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*(S->top++) = e;
return 1;
}
//若栈不为空,则删除栈顶元素,用e返回其值,返回true, 否则返回false
bool Pop(SqStack *S, SElemType *e) {
if (S->top == S->base) return 0;
*e = *(--S->top);
return 1;
}
//检查括号字符在字符集中的位置
int CheckChar(char c, char OP[]) {
int i;
for (i = 0; i < 3; i++)
if (c == OP[i])return i;
return 999;
}
int main() {
SqStack OPTR;
InitStack(&OPTR);
Push(&OPTR, '#');
printf("输入括号以“#”结尾\n");
char c;
c = getchar();
int m = 1; //判断最终是否完全匹配 完全匹配 值为1,否则为0
char OP1[] = {'[', '(', '{'}; //前置括号字符集
char OP2[] = {']', ')', '}'}; //后置括号字符集
while (c != '#') {
if (CheckChar(c, OP1) < 3) {
Push(&OPTR, c);
c = getchar();
} else {
if (CheckChar(GetTop(OPTR), OP1) == CheckChar(c, OP2)) {
//如果需要检验的两个符号在前置和后置括号集中的位置相同则表示配对成功
//例如[和],[在前置括号集中的位置1,]在后置括号集中的位置1,所以匹配成功
Pop(&OPTR, &c);
c = getchar();
continue;
} else {
m = 0;
break;
}
}
}
if (GetTop(OPTR) != c)m = 0;
if (m == 1)printf("\n括号完全匹配!");
else printf("\n括号匹配失败!");
return 0;
}
到此这篇关于C语言实现括号匹配的方法的文章就介绍到这了,更多相关C 实现括号匹配内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
c语言一串字符括号配对,C语言实现括号匹配的方法相关推荐
- 统计字符 c语言程序,统计字符个数的C语言程序.doc
统计字符个数的C语言程序.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...
- java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...
·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bnc·b,b字符串为asdfgvbbnc ...
- C语言输入不同字符 屏幕显示不同,c语言中易混淆的东西 1 getch() getche()和getchar()之间区别 scanf sscanf (fscanf fgets fgetc )...
getch() getche()和getchar()之间区别 发布人 : IT专家 发布时间 : 2009-10-21 07:52:23.0 首先不要忘了,要用getch()必须引入头文件conio. ...
- c语言统计字母字符数字字符个数,C语言统计字符个数代码分享
C语言实现统计字符个数 #include int main() { int sz[10]={0},zm[26]={0},z[26]={0},i,space=0,e=0,t=0; char c; pri ...
- c语言狗脸字符画,网络强势语言模因传播力的学理阐释-人口研究.pdf
网络强势语言模因传播力的学理阐释-人口研究 国际新闻界 2016.02 本期话题/网络传播研究 网络强势语言模因传播力的学理阐释 曹进 靳琰 摘要 本文以自建语料库数据和第三方数据为语料,根据模因理论 ...
- 括号配对c语言,括号匹配(c语言实现)
1要求 编写程序检查该字符串的括号是否成对出现,而且不能交叉出现. 输入: 一个字符串,里边可能包含"()"."{}"."[]"三种括号,& ...
- c语言一段字符加密,请问C语言怎么实现对一长串字符进行MD5加密?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 typedef unsigned char *POINTER; typedef unsigned short int UINT2; typedef uns ...
- c语言输入一串字符辨别奇偶,c语言设计输入一个正整数判断其中各个数字是否奇数偶数交替出现是输出yes不是输出no...
整数中,不能被2整除的数是奇数,奇数可用2k+1表示,这里k是整数. 在下面,有奇数的性质: (1)奇数不会同时是偶数:两个连续整数中必需有一个是奇数: (2)奇数个奇数和是奇数: (3)两个奇数的差 ...
- c语言中空格字符怎么表示_C语言中常用的字符串操作函数
作者:陈太浪 出处:https://home.cnblogs.com/u/TomHe789/ C语言中提供了许多的字符串操作函数,常见的字符串操作函数有以下几种: 1.求字符串长度的函数 原型函数:s ...
最新文章
- Fragment 使用 replace 的方式实现切换 以及切换的时候Fragment 生命周期
- 古塔问题matlab,基于 Matlab 对古塔变形趋势探究的数学模型
- Ajax和JSON-学习笔记04【JSON_解析器】
- Dotnet core基于ML.net的销售数据预测实践
- hive hql文档_大数据学习不能停,看看如何安装hive快800倍!共572.91M视频文档
- 魅族黄章坐不住了:下一代旗舰堆料足 主打性价比
- n3k配置vpc是否还需要配置hsrp_VPC配置案例
- paip.ollydbg 常用流程以及找到子程序调用地址
- CAD图形的缩放——放大镜
- CnOpenData中国工业企业股东信息数据
- 初次软件开发(总结篇 之二)_-Chaz-_新浪博客
- LoadRunner “add measurements”(添加度量)菜单问题
- 594万元奖金 | “2020 年全国人工智能大赛”重磅启动
- Qt5操作Excel操作的一些心得
- python量化交易第五章
- 吉尔电子烟获1200万天使轮融资
- 雄安周边各县区限购限贷政策一览2019(持续更新)
- Java 性能优化的七个方向
- POC、EXP、Payload的区别
- AMD双核补丁吐血之作6个补丁