写一个栈,判断输入偶数个字符时,是否为回文如abba就是;
#include<iostream>#include<cstring>
using namespace std;
#define MAXSIZE 100
typedef char ElymType;
typedef struct
{
ElymType stack[MAXSIZE];
int top;
}SqStack;
void InitStack(SqStack *S)//初始化栈;
{
S->top=-1;
}
int StackEmpty(SqStack *S)//判别栈是否为空,空则返回true;不空则返回false;
{
if(S->top==-1)
return true;
else
return false;
}
void push(SqStack *S,char m)//入栈操作;
{
S->top++;
S->stack[S->top]=m;
}
ElymType GetTop(SqStack *S)//读取栈顶元素;
{
ElymType e=S->stack[S->top];
return e;
}
void pop(SqStack *S)//出栈操作,无返回值;
{
S->top--;
}
int JudBack(SqStack *S,char *m)
{
int t=1;//t用来记录栈中元素的个数;
int n=0;
push(S,m[0]);
for(int j=0;m[j]!='\0';j++)
t++;
cout<<t<<endl;//为什么老是输出204啊!求大神指教,并给出改正方案,谢!
//cout<<n<<endl;
if(n%2==0)
{
for(int i=1;i<n;i++)
{
if(m[i]!=GetTop(S))
push(S,m[i]);
else if(m[i]==GetTop(S))
pop(S);
}
}
if(StackEmpty(S))
t=1;
return t;
}
int main()
{
SqStack S;
InitStack(&S);
char ch,m[100];
cout<<"请输入要检测的字符串:"<<endl;
int i=0;
do{
scanf("%c",&ch);
if(ch!='@')
m[i++]=ch;
}while(ch!='@');
int p=JudBack(&S,m);
if(p==1){
//cout<<p<<endl;
cout<<"您输入的字符是回文!"<<endl;
}
else if(p==0)
{
//cout<<p<<endl;
cout<<"您输入的字符不是回文!"<<endl;
}
return 0;
}
我的理念是先入栈第一个元素,而后依次读字符,若与栈顶元素相等则出栈,否则入栈;最后栈为空则是回文;