错误又来了。。。

孤远无梦 孤远无梦 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
/*课后习题1.8-h

h. 假设表达式中允许包含3中括号:圆括号、方括号和大括号。
设计一个算法采用顺序栈判断表达式中的括号是否正确配对。
void Bracketmatch(const char* c)

*/
#include <iostream>
#include <cstring>
#include <string>

using namespace std;
class stack {
private:
int maxsize;
int top;
char* st;

public:



stack(int size)
{
maxsize = size;
top = -1;
st = new char[maxsize];
}

void push(char item)
{
st[++top] = item;
}

char top1()
{
return st[top];
}

void pop()
{
top--;
}

bool empty()
{
return top == -1;
}
};
/*
TODO:计一个算法采用顺序栈判断表达式c中的括号是否正确配对。
输出:1. 遍历表达式c过程中,匹配错误 cout << c[i] << " 匹配错误" << endl;
2. 遍历之后,栈为空,则匹配正确,cout << "匹配正确!" << endl;
若不为空,则 cout << s1.top1() << " 匹配错误" << endl;
*/
void Bracketmatch(const char* c) //括号匹配
{
bool bj=true;
char t;
stack s1(strlen(c)+1);
for (unsigned int i = 0; i < strlen(c); i++)
{
t = c[i];
switch (t)
{
case '(':
s1.push(t);
break;
case '[':
s1.push(t);
break;
case '{':
s1.push(t);
break;
case ')':

if (s1.top1() == '(')
{
s1.pop();
break;
}
else
{
cout << c[i] << " 匹配错误" << endl;
bj = false;
break;
}
case ']':
if (s1.top1() == '[')
{
s1.pop();
break;
}
else
{
cout << c[1] << " 匹配错误" << endl;
bj = false;
break;
}
case '}':
if (s1.top1() == '{')
{
s1.pop();
break;
}
else
{
cout << c[i] << " 匹配错误" << endl;
bj = false;
break;
}
default:
break;
}
}
if (bj)
{
if (s1.empty())
{
cout << "匹配正确!" << endl;
}
else
cout << s1.top1() << " 匹配错误" << endl;
}
}

int main()
{

string s;
getline(cin, s);
Bracketmatch(s.c_str());
return 0;
}


运行结果不对

这个要求写那个匹配函数,其他地方应该是不让改的

这里是几个用例

用例1:
假设输入为:
{1*[3*2+(2-1)]}
则输出为:
匹配正确!

用例2:
假设输入为:
{}{[]()()()()[]{{{}}}
则输出为:
{ 匹配错误

用例3:
假设输入为:
{1*[3*2+(2-1)}]
则输出为:
} 匹配错误

用例4:
假设输入为:
(1*(3-(3*[3%[4=[t }5}7-}i9]73]24]5-)6)+)6*)5%{6*{3^{2!!(
则输出为:
} 匹配错误

用例5:
假设输入为:
) ] } { ] (
则输出为:
) 匹配错误

...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
孤远无梦
C语言 70,040 成员 243,237 内容