【发布时间】:2021-03-29 07:29:59
【问题描述】:
我需要分隔一系列括号来检查它是否平衡。我的方法是将序列分成相等的两半并将它们推入单独的堆栈中。 当我尝试将序列的第二半推入反向堆栈时,就会出现问题。它正在影响第一个堆栈。我不知道为什么会这样,如果我删除代码的第二个半序列部分,第一个堆栈工作正常。下面是代码,我还将附上带有和不带有第二个堆栈效果的输出。
#include <iostream>
#include <string>
using namespace std;
char front_stack[]={};
char rev_stack[]={};
int topf=0,topr=0;
void push_fr(char);
void push_re(char);
int main()
{
string seq;
cin>>seq;
int len=seq.length();
for(int i=0;i<len/2;i++){
front_stack[i]=seq[i];
}
for(int i=0;i<len/2;i++)
cout<<front_stack[i]<<endl;
for(int i=3,j=0;i<len;i++)
rev_stack[j]=seq[i];
for(int i=0;i<len/2;i++)
cout<<front_stack[i]<<endl;
}
输出:
Sequence --{[()]}
Before adding second stack
First stack's output
{
[
(
After adding to second stack
First stack's output
{
}
(
谢谢。
【问题讨论】:
-
您的数组中有 0 个项目,因此当您执行 front_stack[0], front_stack[1], ... 时,您将覆盖其他变量。
-
@user253751 感谢您的回复。但是我使用的是不同的堆栈,当我不使用第一个堆栈时如何覆盖以及为什么只有最后两个元素在前堆栈中受到影响。请解释一下,我不明白。
-
@Sumanthmandalapu 使用
std::stack<char>。 -
@user253751 我改成了你提到的front_stack[100]和rev_stack[100],错误解决了。
-
您的精简示例(精简很好!)不再使用任何堆栈功能。因此,在不参考堆栈的情况下重新构建您的问题是有意义的(并且可能会在此过程中获得一些见解)。
标签: c++ data-structures stack brackets