圆括号匹配

问题描述:

设计一个算法判断算数表达式的圆括号是否正确匹配

算法思想:
使用栈来实现,当在输入的字符串中检测到‘(’字符时,该字符入栈。当在输入的字符串中检测到‘)’字符时,上一个字符出栈
最后判断栈是否为空,若为空,则圆括号匹配正确,否则,圆括号匹配不正确。
需要注意的是当‘)’字符最先出现时,直接判断圆括号匹配不正确。

代码实现:
ParenthesisMatch.cpp

#include<string>
#include"SeqStack.h"
using namespace std;

int main()
{
    SeqStack<char> stack1;              //定义一个顺序栈对象
    string s1;                          //定义一个串
    cout<<"请输入算数表达式:";
    cin>>s1;
    for(int i=0; i<s1.size(); i++)      //依次检测每个字符
    {
        if(s1[i]=='(')                  //当出现'('时,入栈
            stack1.Push(s1[i]);
        else if(s1[i]==')' && stack1.Empty())   //当')'最先出现,直接判断圆括号不匹配
        {
            cout<<"算数表达式圆括号不匹配!"<<endl;
            return 0;
        }
        else if(s1[i]==')' && !stack1.Empty())      //当出现')'且不是最先出现时,上一个字符出栈
            stack1.Pop();
    }
    if(stack1.Empty())                              //栈空,则圆括号匹配正确
        cout<<"算数表达式圆括号匹配!"<<endl;
    else                                            //否则,圆括号匹配不正确
        cout<<"算数表达式圆括号不匹配!"<<endl;
    return 0;
}

SeqStack.h

#include<iostream>
using namespace std;
const int StackSize = 1024;     //定义栈的最大高度

template<class T>
class SeqStack                  //定义顺序栈的模板类
{
    public:
        SeqStack(){top = -1;}   //构造函数,初始化空栈
        void Push(T x);         //入栈操作
        T Pop();                //出栈操作
        T GetTop();             //获得栈顶元素
        bool Empty();           //判断栈是否为空
    private:
        T data[StackSize];      //定义数组
        int top;                //栈顶指针
};

template<class T>
void SeqStack<T>::Push(T x)     //入栈操作
{
    if(top >= StackSize-1) throw"上溢";
    top++;                      //栈顶指针上移
    data[top] = x;
}

template<class T>
T SeqStack<T>::Pop()            //出栈操作
{
    if(Empty()) throw"下溢";
    top--;                      //栈顶指针下移
    return data[top+1];
}

template<class T>
T SeqStack<T>::GetTop()         //查找栈顶元素
{
    if(Empty()) throw"下溢";
    return data[top];
}

template<class T>
bool SeqStack<T>::Empty()
{
    if(top==-1)
        return true;
    else
        return false;
}

实验结果:
《圆括号匹配》

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/u014644805/article/details/45592009
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞