#include<iostream.h>
#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define Stack_Size 50 //定义栈的最大容量
typedef struct
{
char a[Stack_Size];
int top;
}SeqStack;
void InitStack(SeqStack *S) //初始化构造一个空栈S
{
S->top=-1;
}
int Push(SeqStack *S,char x)//进栈函数
{
if(S->top==Stack_Size-1)//判断栈是否栈已满
return(FALSE);
S->top++; //修改栈顶指针
S->a[S->top]=x; //将值进栈
return(TRUE);
}
int Pop(SeqStack *S,char *x)//出栈函数
{
if(S->top==-1) //判断栈是否为空
return(FALSE);
else
{
*x=S->a[S->top]; //将出栈数据放入x的所指的空间
S->top--; //修改栈顶指针
return(TRUE);
}
}
int IsEmpty(SeqStack *S) //判断栈是否为空
{
if(S->top==-1)
return(FALSE);
else
return(TRUE);
}
int HuiWen() //回文函数
{
SeqStack h; //定义栈h
char ch,temp;
InitStack(&h); //调用初始化栈的函数
cout<<'\n'<<"请输入字符序列:"<<endl;
ch=getchar(); //getchar()读入字符
while(ch!='&')
{
Push(&h,ch); //入栈
ch=getchar();
}
do
{
ch=getchar();
Pop(&h,&temp); //出栈
if(ch!=temp)
{
cout<<"不是回文字"<<endl;
return(FALSE);
}
}while((ch!='@')&&IsEmpty(&h));//判断ch未读到@,且栈不为空,则继续循环
if(ch!='@'&&!IsEmpty(&h))//ch读到@且栈为空了
{
cout<<"是回文字"<<endl;
return(TRUE);
}
else
{
cout<<"不是回文字"<<endl;
return(FALSE);
}
}
void main()
{
cout<<"这是测试回文字小程序"<<endl;
cout<<"输入格式###&###@(&代表间隔,@代表结束)最多50个字符!"<<endl;
HuiWen();
}