C++中利用栈实现的括号匹配检验问题

小彘不会飞 2011-10-25 05:04:14
主函数代码如下,输入()[]等都没问题,但是当输入嵌套的括号,如({})时,仍会显示匹配错误,请大家帮忙看一下哪里有问题,麻烦啦~


//SeqStackMain.cpp
#include <iostream> //引用输入输出流
using namespace std;
#include "SeqStack.cpp" //引入成员函数文件

void main()
{
SeqStack<char>a;
char s[30];
char *x=s;
cout<<"请输入待检验括号(以回车结束):"<<endl;
cin>>s;
while(*x!='\n')
{
if(*x=='(')
a.Push (*x);
if(*x=='[')
a.Push (*x);
if(*x==')')
{
if(a.GetTop() =='(')
a.Pop ();
break;
}
if(*x==']')
{
if(a.GetTop() =='[')
a.Pop ();
break;
}
x++;
}
if(a.Empty ())
cout<<"括号匹配正确!\n";
else
cout<<"括号匹配错误!\n";
system("pause");

}

...全文
719 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿尼小码 2011-10-27
  • 打赏
  • 举报
回复
算法没错啊
阿尼小码 2011-10-27
  • 打赏
  • 举报
回复
对不起说错了
小彘不会飞 2011-10-27
  • 打赏
  • 举报
回复
打错了,是([])或者[()]……
阿尼小码 2011-10-25
  • 打赏
  • 举报
回复
楼主要细心啊
阿尼小码 2011-10-25
  • 打赏
  • 举报
回复
如({})时,仍会显示匹配错误 我对楼主无语
if(*x=='(')
a.Push (*x);
if(*x=='[')
a.Push (*x);
没有对{ }判断的
turing-complete 2011-10-25
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
#include <stack>



/* 检查小括弧和中括弧混合串的匹配情况 */
bool checkBraces(std::string const &input_str)
{
std::stack<char> braces;
size_t const len(input_str.length());
for (size_t i(0); i < len; ++i)
{
switch (input_str[i])
{
case ')' :
if (!braces.empty() && braces.top() == '(')
{
braces.pop();
}
else
{
return false;
}
break;

case ']' :
if (!braces.empty() && braces.top() == '[')
{
braces.pop();
}
else
{
return false;
}
break;

case '(' :
braces.push('(');
break;

case '[' :
braces.push('[');
break;

default : break;
}
}
if (braces.empty())
{
return true;
}
else
{
return false;
}
}

int main()
{
std::string str("asdfg(a[[9s]gh)");
std::cout << checkBraces(str) << std::endl;
}

64,632

社区成员

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

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