PTA 7-2 回文判断 (20 分)
回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。
输入格式:
输入待判断的字符序列,按回车键结束,字符序列长度<20。
输出格式:
若字符序列是回文,输出“YES”;否则,输出“NO”。
输入样例:
abdba
输出样例:
YES
#include<iostream> #include<cstdlib> #include<string.h> using namespace std; #define N 20 struct Stack{ char s[N]; int top;//指示栈顶元素 }; Stack *SetNullS(Stack *S){//置空栈 S->top = -1; return S; } int Empty(Stack *S){ if(S->top >=0) return 0; else return 1; } Stack *PushStackS(Stack *S, char c){//进栈 if(S->top == N-1){ return NULL; } else{ S->top++; S->s[S->top] = c; } return S; } char *PopS(Stack *S){//出栈 if(S->top < 0) return NULL; else{ S->top--; char *c = (char *)malloc(sizeof(char)); *c = S->s[S->top+1]; return c; } } int main(){ char a[N], b[N]; Stack *S = (Stack*)malloc(sizeof(Stack)); SetNullS(S); cin>>a; if(strlen(a) == 0) cout<<"NO"; for(int i=0; i<strlen(a); i++){ PushStackS(S, a[i]); } for(int i=0; i<strlen(a); i++){ b[i] = *(PopS(S)); } if(strcmp(a, b)) cout<<"NO"; else cout<<"YES"; return 0; }