今天我已经了解了c中的数据结构和堆栈,我写了一个代码来反转一个字符串,但这给了我错误我不知道我的代码有什么问题,这里是我的代码,请帮助我找到错误
#include <stdlib.h>
#include <stdio.h>
#define MAXSTACK 50
typedef char StackEntryType;
typedef enum{false, true}Boolean;
typedef struct{
int top;
StackEntryType entry[MAXSTACK];
}stack;
//I have used this code to create a stack,
void CreateStack(stack *S){
S->top = -1;
}
//This the code to check whether the stack is Empty or not,
Boolean IsStackEmpty(const stack *S){
return (S->top==-1);
}
//This is the code to check whether the stack is Full or not,
Boolean IsStackFull(const stack *S){
return (S->top==MAXSTACK-1);
}
//This code I have used to push an element from the stack,
void push(StackEntryType item, stack *S){
if(IsStackFull(S)){
printf("Stack is full\n");
}else{
S->entry[++S->top] = item;
}
}
//This is the code to pop an element from stack,
void pop(StackEntryType *item, stack *S){
if(IsStackEmpty(S)){
printf("Stack is Empty\n");
}else{
*item = S->entry[S->top--];
}
}
//This is the main function of my code,
void main()
{
stack S;
int i;
char c;
char Str[] = "This is an example using stack";
CreateStack(&S);
printf("\nThe String is : \n%s", Str);
for(i=0; Str[i]!='\0'; i++){
if(!IsStackFull(&S)){
push(Str[i], &S);
}
}
printf("\nThe string for the stack : \n");
while(!IsStackEmpty(&S)){
pop(&c, &S);
putchar(c);
}
printf("\nThe String is : \n%s", Str);
}
让我知道我的代码出了什么问题。
答案 0 :(得分:2)
您正在使用void main()
-我建议您切换到某些标准的编译器gcc
或clang
。
错误::我可以看到您现在将str[i]!=\o
替换为\0
很好。除此之外,您缺少}
来标记pop
和push
函数的结尾。完成此操作后,您的程序将正常运行并反转字符串打印- kcats gnisu elpmaxe na si sihT
答案 1 :(得分:1)
如果您期望Str包含反向字符串,则应将其放在此处。以此替换您的while循环(假定Str长度小于堆栈大小)。
for(i = 0 ; !IsStackEmpty(&S) ; i++){
pop(&c, &S);
Str[i] = c;
}