用栈实现括号匹对

zzqth 2012-03-22 04:56:17
//stack.h
#ifndef STACK_H
#define STACK_H
static int level = 0;//存储最后入栈的元素级别0-3对应符号如下面symbol
const char symbol[4] = {'(','[','{','<'};

int checkCharLevel(char _char);//检测字符_char的级别,并返回
bool push(char * _string,char _char,int &num);//进栈函数
bool check(char *_string);

#endif

//stack.cpp
#include <iostream>
#include "stack.h"

int checkCharLevel(char _char)//检测字符_char的级别,并返回
{
int mylevel;
for (int i = 0;i < 4;i++)
{
if (_char==symbol[i])
{
mylevel = i;
break;
}
}
return mylevel;
}

bool push(char * _string,char _char,int &num)//进栈函数
{
bool flag = true;
int mylevel;//存储字符_char的级别

_string = _string + num;//把指针移动到栈顶
mylevel = checkCharLevel(_char);
if (mylevel<=level||num==0)//判断括号级别是否合理
{
*_string = _char;
level = mylevel;
num++;
}
else
{
flag = false;
}
return flag;
}

bool pop(char * _string,char _char,int &num)//出栈函数
{
bool flag = false;
if (num==0)
{
return flag;
}
_string = _string+num-1;

if (_char==')'&&*_string=='('||_char==(char)(*_string+2))//判断当前字符如之前进栈的字符是否相配
{
*_string = '\0';
num--;
if (num==0)//表示当前栈为空
{
level = 0;
}
else
{
level = checkCharLevel(*(--_string));//重置字符级别
}
flag = true;
}

return flag;
}

bool check(char *_string)
{
bool flag = true;
int num=0;//存储栈内元素的个数
char *pushString;//存储栈

pushString = new char [std::strlen(_string)+1];

for (int i = 0;_string[i]!=0;i++)
{
switch(_string[i])
{
case '<':
case '(':
case '[':
case '{':
flag = push(pushString,_string[i],num);//成功入栈,返回true,否则false
break;
case '>':
case ')':
case ']':
case '}':
flag = pop(pushString,_string[i],num);//成功出栈,返回true,否则false
break;
default:
break;
}
if (flag==false)
return flag;
}

return flag;
}

//main.cpp
#include <iostream>
#include "stack.h"

using namespace std;

void main()
{
char *_string;
int num;

cout << "please enter the number of string:";
cin >> num;
_string = new char[num];
cout << "please enter string:";
cin >> _string;
if (check(_string))
{
cout << "True!"
<< endl;
}
else
{
cout << "False!"
<< endl;
}
delete _string;
}
...全文
64 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,653

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧