用栈来判断是否为回文的问题
具体题目:试写一个算法,识别依次读入的一个以“#”为结束符的字符序列是否为形如“序列1@序列2”模式的字符序列。其中序列1和序列2中都不含字符“@”,且序列2是序列1的逆序列。例如,“a+b@b+a”是属于该模式的字符序列,而“1+3@3-1”则不是。现在的问题就是除了输入“@”是yes,输入其他的输出都是no,找不出是什么原因,希望各位大神能帮我看看
我写的代码如下
程序代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MaxSize 100 struct SqStack { char data[MaxSize]; int top; //栈顶指针 }; void InitStack(SqStack *&s)//初始化栈 { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } char Push(SqStack *s,char e)//进栈 { if(s->top==MaxSize-1) return 1; else { s->top++; s->data[s->top]=e; } return 0; } char Pop(SqStack *s)//出栈 { return(s->data[s->top--]); } int main() { int i=0; char e; SqStack *s; char str[MaxSize]; InitStack(s); printf("请输入一个字符串:\n"); scanf("%s",&str); // 先将‘@’前的字母入栈 while(str[i]!='\0'&&str[i]!='@') { Push(s,e); i++; } // 如果字符串中 没有出现 ‘@’返回no if(str[i]=='\0') return (printf("no")); i++;// i 定位到 & 后面第一个字符处 while(str[i]!='\0'&&s->top!=-1) { char data=Pop(s); if(data==str[i]) i++; else return (printf("no")); } // 如果正好相同就返回yes if(str[i]=='\0'&&s->top==-1) return (printf("yes")); else return (printf("no")); }