首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为什么不论输入什么都是输出不是回文数?该如何处理

2012-05-03 
为什么不论输入什么都是输出不是回文数?# include stdio.h# include string.h# define null 0# define

为什么不论输入什么都是输出不是回文数?
# include <stdio.h>
# include <string.h>
# define null 0
# define maxsize 100
# define SIZE 100
typedef struct stack{

int top,maxstack;
char elem[maxsize];
} stack;
typedef struct {
char elem[100];
int front;
int rear;}SeqQueue;
void InitQueue(SeqQueue * Q)
{
Q->front = 0;
Q->rear = 0;
}

int EnterQueue(SeqQueue * Q,char x)
{
if((Q->rear + 1)%SIZE == Q->front)
return 0;
Q->elem[Q->rear] = x;
Q->rear = (Q->rear+1)%SIZE;
return 1;


int DeleteQueue(SeqQueue * Q,char * x)
{
if(Q->front == Q->rear)
return 0;
* x = Q->elem[Q->front];
Q->front = (Q->front + 1)%SIZE;
return 1;
}

void GetHead(SeqQueue Q,char * x)
{
*x = Q.elem[Q.front];
}

int IsEmpty(SeqQueue Q)
{
if((Q.front+1)%SIZE == Q.rear)
return 1;
else
return 0;}

void creat(stack*s)
{s->top=-1;
s->maxstack=maxsize;}
int push(stack *s,char x)
{
if (s->top>=maxsize-1)

return 0;
else

{
s->elem[++(s->top)]=x;

return 1;}
}
int popstack(stack *s,char *x)
{if (s->top<0)
return null;
else return s->elem[(s->top)--];
}
int IsStack(stack s)
{
if(s.top == -1)
return 0;
else
return 1;}

int gettop(stack *s,int *x)
{if (s->top<0)
return null;
else return *x=s->elem[(s->top)];}

void HWS(char str[])
{
int i = 0;
char ch1,ch2;
SeqQueue Q;
stack s;

InitQueue(&Q);
creat(&s);

while(str[i] != '\0')
{
push(&s,str[i]);
EnterQueue(&Q,str[i]);
i++;
}
while(IsEmpty(Q)==0 || IsStack(s) == 0)
{
DeleteQueue(&Q,&ch1);
popstack(&s,&ch2);
if(ch1 != ch2)

{printf("\n这不是回文数~!~\n");

return ;}



printf("\n这是回文数~!~\n");}

}

int main()
{
char str[50];
printf("请输入要检测的回文数:");
gets(str);
HWS(str);
return 0;
}


[解决办法]
代码太乱了,看了判断是否回文的那段还是正确的,就是不确定楼主的堆栈是不是没问题
还有,如果堆栈没有问题建议楼主这样写:
main里面的:
char str[50] = {0};
或者用memset设置为0:
memset(str, 0, sizeof(str));
[解决办法]
在函数popstack中,把
else return s->elem[(s->top)--];
改为
else {
*x=s->elem[(s->top)--];
return 1;
}

热点排行