在c中实现字符串栈



我想实现一个字符串堆栈,其中堆栈的每个元素都代表一个字符串。例如我输入人名作为元素。我已经写了下面的代码,但显示不工作。

#include <stdio.h>
#include <stdlib.h>
#define max 5
struct stack{
int top;
char *stack[100];
};
typedef struct stack stack;
void push(struct stack *s)
{
char element[20];
if (s->top == max-1)
{
printf("Stack is fulln");
return;
}
else
{
s->top+=1;
printf("Enter the element to be pushedn");
scanf("%s",element);
for(int i=0;element[i]!='/0';i++)
*(s->stack[s->top])=element;
}
}
void pop(struct stack *s)
{
if (s->top == -1)
{
printf("Stack is emptyn");
return;
}
else
{        printf("The element deleted is %sn",*(s->stack[s->top]));
s->top-=1;
}
}
void display(struct stack *s)
{
if (s->top == -1)
{
printf("Stack is emptyn");
return;
}
else
{
for (int i=0;i<=s->top;i++)
{
printf("%sn",*(s->stack[i]));
}
}
}
int main()
{
struct stack s;
s.top=-1;
int ch;
for(;;)
{
printf("Enter your choicen1.Pushn2.Popn3.Displayn4.Exitn");
scanf("%d",&ch);
switch (ch)
{
case 1:
push(&s);
break;
case 2:
pop(&s);
break;
case 3:
display(&s);
break;
case 4:
goto a;
break;
default:
printf("Invalid choice");
break;
}
}
a:
return 0;
}

这是一个期望的终端示例:输入你的选择1.推2.流行3.显示4.退出1输入要推送的元素约翰输入你的选择1.推2.流行3.显示4.退出1输入要推送的元素曼迪输入你的选择1.推2.流行3.显示4.退出3.这些元素是:约翰曼迪

我只看了你代码的push()部分。

您有char *stack[100];,这是一个包含100个字符指针的数组。
你需要char stack[5][20];,它是一个5个字符串的数组,每个字符串20个字符。

要在堆栈中保存字符串,您需要更改代码的复制部分:

for(int i=0; element[i]!=''; i++)
s->stack[s->top][i] = element[i];

将字符串字符for字符复制到堆栈中。strncpy()是更好的方法。

strncpy(s->stack[s->top], element, 20);

查看对你的问题的所有评论,以及其他问题和代码气味。还有一些问题还没有解决。

相关内容

  • 没有找到相关文章

最新更新