字符串匹配问题

题目

题目描述

判断包含有括号{,[,<,(,),>,],}组成的字符串是否匹配!

           如输入:[ab{*(asdgasdfg)h<hpnip>adva}<a*&/h>]sdfsad,则匹配(match)

           如输入:[ab(--<d345[dfa>}sdf]),则不匹配(mismatch)

 {dsfg} [,则不匹配(mismatch)

即左右括号成对出现,并且顺序正确,叫作“匹配”!

输入

一行可能有空格的字符串

输出

如果匹配,则输出match否则输入mismatch

样例

输入样例#1

[ab{*(asdgasdfg)h<hpnip>adva}<a*&/h>]sdfsad

输出样例#1

match

输入样例#2

{dsfg} [

输出样例#2

mismatch

输入样例#3

)(

输出样例#3

mismatch

题目分析

一道简单的栈操作题目,具体流程如下

1、输入字符串

2、按位操作:

        左括号:入栈

        其他字母:不做操作

        右括号:判空?

                                true:不匹配

                                false:栈顶是否匹配?

                                                        true:栈顶出栈

                                                        false:跳出循环

3、判空:

        true:匹配

        false:不匹配

完整代码

#include <bits/stdc++.h>
using namespace std;
   
int main()
{
    stack<char>x;//定义栈
    string n;
    char temp;
    int count=0;
    getline(cin,n);//按行输入
    while (n[count]!='\0')
        {
            if (n[count]=='<'||n[count]=='('||n[count]=='['||n[count]=='{')
                {
                    x.push(n[count]);//左括号入栈
                }
            if (n[count]=='>'||n[count]==')'||n[count]==']'||n[count]=='}')//右括号判断是否匹配
                {
                    switch (n[count])
                        {
                            case '>': temp='<';
                                        break;
                            case ')': temp='(';
                                        break;
                            case ']': temp='[';
                                        break;
                            case '}': temp='{';
                                        break;
                        }
                    if (x.empty())//判空
                        {
                            cout << "mismatch";
                            return 0;
                        }
                    if (x.top()==temp) x.pop();//括号匹配,出栈
                    else break;
                }
            count++;
        }
    if (x.empty()) cout << "match";//判空
    else cout << "mismatch";
    return 0;
}

码风比较特殊

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值