回 帖 发 新 帖 刷新版面

主题:用栈实现的回文程序,帮我看看哪儿错了

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define OK 1
#define ERROR 0
typedef int Status;
//------栈的顺序存储表示------------
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{char *base;
 char *top;
 char stacksize;
}SqStack;
Status InitStack(SqStack &s)
{//构造一个空栈
 s.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
 if(!s.base) return ERROR;
 s.top=s.base;
 s.stacksize=STACK_INIT_SIZE;
 return OK;
}
Status GetTop(SqStack s,char &e)
{//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
 if(s.base==s.top) return ERROR;
  e=*(s.top-1);
  return OK;
}
Status push(SqStack &s,char e)
{//插入e为新的栈顶元素
 if(s.top-s.base>=s.stacksize)
 {s.base=(char *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(char));
  if(!s.base) return ERROR;
  s.top=s.base+s.stacksize;
  s.stacksize+=STACKINCREMENT;
 }
 *s.top++=e;
 return OK;
}
Status pop(SqStack &s,char &e)
{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回炽OK;否则返回ERROR
    if(s.base==s.top) return ERROR;
    e=*--s.top;
    return OK;
}
Status StackEmpty(SqStack s)
{//判栈是否为空
 if(s.base==s.top)  return OK;
 else return ERROR;
}
main()
{char ch1[50],ch2[50],e;int i=0;SqStack s;
InitStack(s);
printf("请输入字符串:");
scanf("%s",ch1);
while(ch1[i]!='\0')
push(s,ch1[i++]);
i=0;
while(!StackEmpty(s))
{pop(s,e);  ch2[i++]=e;
}
/*for(i=0;i<n;i++)
if(ch1[i]=!ch2[i]) break;*/
if(!strcmp(ch1,ch2)) printf("输入的字符串是回文\n");
else printf("输入的字符串不是回文\n");
 
}

回复列表 (共6个回复)

沙发

请注意你的函数的形参和实参是否匹配。
例如:pop(SqStack &s,char &e)这里要求形参都是指针变量,而你的main函数中却是
pop(s,e);  s和e都不是指针变量。
还有很多这样的情况,你一一改过后应该就可以了。

板凳

你的意思是不是pop(s,e);  要改成pop(*s,*e);   ??
pop(SqStack &s,char &e) 这本身这个意思 :加了&就是表示可以被引用啊 我不懂你什么意思

3 楼

还有你调过了吧?

4 楼

main()
{char ch1[50],ch2[50],e;int i=0,j;SqStack s;
InitStack(s);
printf("请输入字符串:");
scanf("%s",ch1);
while(ch1[i]!='\0')
push(s,ch1[i++]);
ch1[i]='\0';
j=0;
while(j<i)
{pop(s,e);  ch2[j++]=e;
}
ch2[j]='\0';

if(!strcmp(ch1,ch2)) printf("输入的字符串是回文\n");
else printf("输入的字符串不是回文\n");

}

5 楼

注意一下这句话:
while(!StackEmpty(s))
{pop(s,e);  ch2[i++]=e;
}

然后stackempty(s)为真,程序return error;
Status StackEmpty(SqStack s)
{//判栈是否为空
 if(s.base==s.top)  return OK;
 else return ERROR;
}

6 楼

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define OK 1
#define ERROR 0
typedef int Status;
//------栈的顺序存储表示------------
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{char *base;
 char *top;
 char stacksize;
}SqStack;
Status InitStack(SqStack &s)
{//构造一个空栈
 s.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
 if(!s.base) return ERROR;
 s.top=s.base;
 s.stacksize=STACK_INIT_SIZE;
 return OK;
}
Status push(SqStack &s,char e)
{//插入e为新的栈顶元素
 if(s.top-s.base>=s.stacksize)
 {s.base=(char *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(char));
  if(!s.base) return ERROR;
  s.top=s.base+s.stacksize;
  s.stacksize+=STACKINCREMENT;
 }
 *s.top++=e;
 return OK;
}
Status pop(SqStack &s,char &e)
{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回炽OK;否则返回ERROR
    if(s.base==s.top) return ERROR;
    e=*--s.top;
    return OK;
}
main()
{char ch1[50],ch2[50],e;int i=0,j;SqStack s;
InitStack(s);
printf("请输入字符串:");
scanf("%s",ch1);
while(ch1[i]!='\0')
 push(s,ch1[i++]); 
 j=0;
while(j<i)
{pop(s,e);  ch2[j++]=e;  
}
ch2[j]='\0';
 
if(!strcmp(ch1,ch2)) printf("输入的字符串是回文\n");
else printf("输入的字符串不是回文\n");
 
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册