任务描述
本关任务:回文序列是正反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文。请设计一个算法判定给定的字符序列是否为回文。
编程要求
输入
多组数据,每组数据有一行。每一行为一个长度不定的字符序列A。当A为“0”时,输入结束。
输出
对于每组数据输出一行。若字符序列A是回文序列,则输出“YES”,否则输出“NO”。
测试说明
平台会对你编写的代码进行测试:
测试输入:
abba
abdba
good
0
预期输出:
YES
YES
NO
来源
https://www.bjfuacm.com/
C++代码
242 head.h
#include <iostream>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
using namespace std;
typedef struct
{
char* base;
char* top;
int stacksize;
}SqStack;
int InitStack(SqStack& S)
{//栈初始化
S.base=new char[MAXSIZE];
if(!S.base)
return OVERFLOW;
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
return OK;
}
int Push(SqStack& S, char e)
{//入栈
if(S.top-S.base==S.stacksize)
return ERROR;
*S.top=e;
S.top++;
return OK;
}
int Pop(SqStack& S)
{//出栈返回栈顶元素
if(S.top==S.base)
return ERROR;
S.top--;
return *S.top;
}
int IsPalindrome(SqStack& S, char* t)
{//判断栈的回文字符序列 不等则返回零, 相等则返回1
InitStack(S);
int i,len=0;
for(i=0;t[i]!='\0';i++)
len++;
for(i=0;i<len/2;i++)
Push(S,t[i]);
if(len%2!=0)
i++;
for(;t[i]!='\0';i++)
{
if(Pop(S)!=t[i])
return 0;
}
return 1;
}
(主函数文件不可编辑)
#include "head.h"
int main()
{
char t[100];
while(cin>>t&&t[0]!='0')
{
SqStack S;
InitStack(S);
if(IsPalindrome(S,t)==1) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}