我以前写的,要求和你的不太一样,给你参考下吧,用栈实现的
/*该程序实现回文字符串的判断,两个字符创用'&'链接,'@'结束
'@'之后的字符将被忽略,'@'号可以省略,但链接符'&'不能省略
例如:abc&cba
将被判断为
满足条件
abc&cba@
将被判断为
满足条件
abc&cba@fjs
将被判断为
满足条件
abc&cb
将被判断为
不满足条件
abc&cb@a
将被判断为
不满足条件
abccba
将被判断为
不满足条件
*/
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50
#define OK 1
#define ERROR 0
typedef struct//定义一个栈
{
char elem[MAXSIZE];
int top;
}seqstack;
int judge()
{
seqstack *x=(seqstack *)malloc(sizeof(seqstack));//创建一个栈
x->top=-1;//栈置为空
char ch;
printf("请输入字符串:");
ch=getchar();//输入一个字符(注:getchar()的用处是获取一个字符,但是在用户输入enter之前会把所有的字符存入缓存区,包括enter)
while(ch!='&')//循环遇到&结束
{
if (ch=='\n')//根据题意,在遇到'&'之前如果用户输入了enter,则enter的之前的字符串一定不是回文字符串,直接返回ERROR
return ERROR;
x->top++;//否,则入栈
x->elem[x->top]=ch;
ch=getchar();//读取下一个字符(注:此时不需要用户输入,直接从缓存区读取字符)
}
//至此为止,所有'@'之前的字符均入栈,'&'则被存放在变量ch中
ch=getchar();//获取'ch之后的'第一个字符
while (ch!='@')//循环遇到'@'结束
{
if (ch==x->elem[x->top])//如果当前字符与栈顶字符相同,则出栈
{
x->top--;
}
else
return ERROR;//不同,则说明不符合回文的条件,返回错误提示
if (x->top==-1)//当栈空时,说明所有栈内的字符均已出栈
{
ch=getchar();//此时,获取下一个字符
if (ch=='\n'||ch=='@')//若这个字符不是'@'或'\n',说明有多余的字符,例如这种情况:abc&cbaa,此时显然不满足回文条件
return OK;
else
return ERROR;
}
ch=getchar();//从缓存区获取下一个字符
}
}
int main()
{
int a;
a=judge();
if (a==OK)
printf("满足条件!!");
else
printf("不满足条件!!");
getchar();
return 0;
}