当前位置: 首页 > news >正文

8586 括号匹配检验

### 思路
1. **初始化栈**:创建一个空栈用于存储左括号。
2. **遍历字符串**:逐个字符检查:
   - 如果是左括号(`(` 或 `[`),则入栈。
   - 如果是右括号(`)` 或 `]`),则检查栈是否为空:
     - 如果栈为空,说明缺少左括号,输出错误信息。
     - 如果栈不为空,弹出栈顶元素并检查是否匹配:
       - 如果匹配,继续检查下一个字符。
       - 如果不匹配,输出错误信息。
3. **检查栈是否为空**:遍历结束后,如果栈为空,说明括号匹配;否则,说明缺少右括号。

### 伪代码
```
function InitStack(S):
    allocate memory for S.base of size STACK_INIT_SIZE
    S.top = S.base
    S.stacksize = STACK_INIT_SIZE
    return OK

function StackEmpty(S):
    return S.top == S.base

function Push(S, e):
    if S.top - S.base >= S.stacksize:
        reallocate memory for S.base with size S.stacksize + STACKINCREMENT
        S.top = S.base + S.stacksize
        S.stacksize += STACKINCREMENT
    S.top = e
    S.top += 1
    return OK

function Pop(S, e):
    if S.top == S.base:
        return ERROR
    S.top -= 1
    e = S.top
    return OK

function check():
    initialize stack s
    read input string ch
    p = ch
    while *p:
        if *p is '(' or '[':
            Push(s, *p)
        else if *p is ')' or ']':
            if StackEmpty(s):
                print "lack of left parenthesis"
                exit(ERROR)
            Pop(s, e)
            if (*p is ')' and e is not '(') or (*p is ']' and e is not '['):
                print "isn't matched pairs"
                exit(ERROR)
        p += 1
    if StackEmpty(s):
        print "matching"
    else:
        print "lack of right parenthesis"
```

### C++代码
 

#include <iostream>
#include <cstdlib>
using namespace std;typedef char SElemType;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 2struct SqStack {SElemType *base;SElemType *top;int stacksize;
};Status InitStack(SqStack &S) {S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));if (!S.base) exit(ERROR);S.top = S.base;S.stacksize = STACK_INIT_SIZE;return OK;
}Status StackEmpty(SqStack S) {return S.top == S.base ? TRUE : FALSE;
}Status 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) exit(ERROR);S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++ = e;return OK;
}Status Pop(SqStack &S, SElemType &e) {if (S.top == S.base) return ERROR;e = *--S.top;return OK;
}void check() {SqStack s;SElemType ch[80], *p, e;if (InitStack(s)) {cin >> ch;p = ch;while (*p) {switch (*p) {case '(':case '[':Push(s, *p);p++;break;case ')':case ']':if (!StackEmpty(s)) {Pop(s, e);if ((*p == ')' && e != '(') || (*p == ']' && e != '[')) {cout << "isn't matched pairs" << endl;exit(ERROR);} else {p++;break;}} else {cout << "lack of left parenthesis" << endl;exit(ERROR);}default:p++;}}if (StackEmpty(s))cout << "matching" << endl;elsecout << "lack of right parenthesis" << endl;}
}int main() {check();return 0;
}

http://www.lryc.cn/news/442070.html

相关文章:

  • 案例精选 | 聚铭助力河北省某市公安局筑牢网络安全防护屏障
  • VBS学习2:问题解决(文件中含义中文运行报错或者中文乱码)
  • 首次揭秘行业内幕!范罗士、希喂、有哈、小米、安德迈宠物空气净化器实测分析
  • 1267:【例9.11】01背包问题(信奥一本通)
  • 信息化时代下的高标准农田灌区:变革与机遇并存
  • 【系统架构设计师-2013年真题】案例分析-答案及详解
  • git merge如何忽略部分路径
  • spring boot导入多个配置文件
  • 硬件工程师笔试面试——无线通讯模块
  • 开源PHP免费家谱应用Webtrees简介
  • kafka消息发送几种方式
  • K1计划100%收购 MariaDB; TDSQL成为腾讯云核心战略产品; Oracle@AWS/Google/Azure发布
  • Kyutai 开源对话模型 Moshi;李飞飞空间智能公司已筹集超过 2.3 亿美元丨 RTE 开发者日报
  • Go语言的io输入输出流
  • 表单里面input的type属性值有哪些?
  • 【Redis】之Geo
  • 常用的k8s容器网络模式有哪些?
  • 4位整数的数位和
  • XHTML学习
  • KTH7823——16 位高精度低延时霍尔磁编码器可编程 ABZ 和 PWM 输出模式角度传感器
  • JDBC笔记
  • 小众语言ruby在苹果中的初步应用
  • Nature: 一种基于宏基因组序列空间生成无参考的蛋白质家族的计算方法
  • play-with-docker使用指南
  • 常见中间件漏洞靶场(tomcat)
  • 一文读懂SpringCLoud
  • tcpdump使用方法
  • 密码字典txt python密码字典代码
  • ubuntu安装emqx
  • F28335 时钟及控制系统