为什么不将字符串推入或弹出堆栈

时间:2019-08-08 19:59:05

标签: c++ string data-structures

这是给我的任务。 我是菜鸟,刚开始编程。 整个字符串不会压入堆栈以及如何弹出。

问题陈述:-将由全名组成的整个字符串分成三个部分,以获取姓氏中间名和姓氏,并按姓氏中间名的顺序显示它们,仅使用堆栈。

我尝试使用2D堆栈

#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<string>
using namespace std;
using std :: string;

char s1[100];
char s2[50],s3[50],s4[50];
int i=0,j=0,k=0,max1=9,top=-1;
char stack[10][10];
char re[10];



void push(char val[])
{
    if(top>=max1)
    {
        cout<<"Stack overflow";
    }
    else
    {
     top++;
     int a=0;
     for (int i=0;i<stack[top]['\0'];i++)
     {
       stack[top][a]=val[i];
       a++;
     }
   }
}


char* pop()
{
  if(top<0)
  {
      cout<<"Stack underflow";
  }
  else
  {
    //for(int j=0;j<=top)
    for(int i=0;i<stack[top]['\0'];i++)
    {
         re[i]=stack[top][i];
        top--;
        return re;
    }

  }
}
void divstring()
{
    for(i=0;s1[i]!=' ';i++)
    {
s2[i]=s1[i];
    }
    s2[i]='\0';
    i++;
    while(s1[i]!=' ')
    {
s3[j]=s1[i];
j++;
i++;
    }
    s3[j]='\0';
    i++;
    while(s1[i]!='\0')
    {
s4[k]=s1[i];
k++;
i++;
    }
    s4[k]='\0';
    i++;
}

int main()
{
//clrscr();
    cout<<"Enter the string: ";
   gets(s1);

    divstring();
    cout<<"The 1 part is "<<s2<<endl;
    cout<<"The 2 part is "<<s3<<endl;
    cout<<"The 3 part is "<<s4<<endl;
  //  getch();
  push(s1);
  push(s2);
  push(s3);

  cout<<pop();
  return 1;
}

没有编译时错误,但字符串不会被压入堆栈或弹出。

2 个答案:

答案 0 :(得分:2)

这里有多个问题。

没有2D堆栈之类的东西。堆栈是一维的。它有一个可用的结局。在C ++中,您使用std :: stack,push(),pop()和empty()。

您需要摆脱全局变量。

您似乎想实现自己的堆栈。您需要确定是否要实现堆栈,这是一个问题。或者,您是否要使用现有堆栈来执行分配?这是一个不同的问题。我无法分辨两者之间。

您应该使用std :: string。

您不处理边界条件。例如,传递没有空格的字符串将在

中无限循环
for(i=0;s1[i]!=' ';i++)

答案 1 :(得分:1)

推送功能非常混乱,这是一个有效的版本

void push(char val[])
{
    if (top >= max1)
    {
        cout << "Stack overflow";
    }
    else
    {
        top++;
        int i = 0;
        for (; val[i] != '\0'; i++)
            stack[top][i] = val[i];
        stack[top][i] = '\0';
    }
}

有许多方法可以改善此问题,您可以使用C strcpy函数来代替手工复制字符串。或者,天堂禁止,您可以使用某些C ++,例如std::stringstd::stack