我想实现一个字符串堆栈,其中堆栈的每个元素都代表一个字符串。例如我输入人名作为元素。我已经写了下面的代码,但显示不工作。
#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);
查看对你的问题的所有评论,以及其他问题和代码气味。还有一些问题还没有解决。