为什么不管输入什么字符串都显示为对称串

#include
#include
#define maxsize 50
typedef char ElemType;
typedef struct{
ElemType data[maxsize];
int top;
}sqstack;
/*初始化栈*/
void initstack(sqstack &s){
s=(sqstack
)malloc(sizeof(sqstack));
s->top=-1;
}
/*销毁栈*/
void destroystack(sqstack &s){
free(s);
}
/
判断栈是否为空*/
bool stackempty(sqstack s){
return s->top==-1;
}
/
进栈*/
bool push(sqstack &s,ElemType e){
if(s->top==maxsize-1)
return false;
s->top++;
s->data[s->top]=e;
return true;
}
/
出栈*/
bool pop(sqstack*&s,ElemType &e){
if(s->top==-1)
return false;
e=s->data[s->top];
s->top--;
return true;
}
/*取栈顶元素*/
bool gettop(sqstack s,ElemType e){
if(s->top==-1)
return false;
e=s->data[s->top];
return true;
}
/
判断str是否为对称串*/
bool symmetry(ElemType str[]){
int i;ElemType e;
sqstack *st;
initstack(st);
for(i=0;i!='\0';i++) //将str的所有元素进栈
push(st,str[i]);
for(i=0;i!='\0';i++){ //处理str的所有字符
pop(st,e);

if(str[i]!=e){ //若e与当前串字符不同表示不是对称串
destroystack(st);
return false;
}
}
destroystack(st);
return true;
}
int main(){
ElemType exp[13];bool s;
printf("请输入一个字符数组:\n");
scanf("%s",exp);
s=symmetry(exp);
if(s)printf("是对称串。");
else printf("不是对称串。");
return 0;
}

symmetry函数中加日志看看呢 ,加了日志你就能很明白

数据结构专栏:https://blog.csdn.net/column/details/20027.html

里面有你险要的答案

判断str是否为对称字符串的那个函数里面,两个for循环结束的条件应该是str[i]!='\0'不是i!='\0'

/判断str是否为对称串*/
bool symmetry(ElemType str[]){
int i;ElemType e;
sqstack st;
initstack(st);
for(i=0;
*i!='\0';**i++) //将str的所有元素进栈 ///i!=0应该改为str[i]!='\0'
push(st,str[i]);
for(i=0;i!='\0';i++){ //处理str的所有字符 ///i!=0应该改为str[i]!='\0'
pop(st,e);

同时还应该判断字符串里面字符的个数是偶数还是奇数