描述
回文序列是正反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文。请设计一个算法判定给定的字符序列是否为回文。
输入
多组数据,每组数据有一行。每一行为一个长度不定的字符序列A。当A为“0”时,输入结束。
输出
对于每组数据输出一行。若字符序列A是回文序列,则输出“YES”,否则输出“NO”。
输入:
abba
abdba
good
0
输出:
YES YES NO
#include<iostream>
using namespace std;
#define maxsize 50
typedef struct {
char data[maxsize];
int top;
}sqstack;
void initstack(sqstack& s) {
s.top = -1;
}
void push(sqstack& s, char e) {
s.top++;
s.data[s.top] = e;
}
void pop(sqstack& s,char &e)
{
e = s.data[s.top];
s.top--;
}
int length(char* str) {
int len=0;
while (str[len] != '\0') {
len++;
}
return len;
}
int if_huiwen(sqstack& s, char* str) {
int len;
char e;
len = length(str);
len--;
for (int i = 0; i <= len / 2; i++) {
push(s, str[i]);
}
int i = len / 2 ;
//偶数个字符
while (i < len && len % 2 != 0) {
pop(s, e);
//cout << e;
if (e == str[++i]) { continue; }
else return 0;
}
//奇数个字符
while (i <= len && len % 2 == 0){
pop(s, e);
if (e == str[i++]) { continue; }
else return 0;
}
//cout << 1;
return 1;
}
//char* input() {
// char* str_row;
// str_row = new char[maxsize];
// int i = 0;
// do {
// cin >> str_row[i++];
// } while (str_row[i] != '\0');
// return str_row;
//}
int main() {
char* str_row;
int * huiwen;
sqstack s;
initstack(s);
str_row = new char[maxsize];
huiwen = new int[maxsize];
int i = 0;
while (cin >> str_row && str_row[0]!='0') {//直接输入一串字符=cin》char *,输入一个字符cin》char
//cout << str_row;
huiwen[i] = if_huiwen(s, str_row);
i++;
}
for (int j = 0; j < i; j++)
{
if (huiwen[j] == 1)
{
cout << "YES" << endl;
}
else
cout << "NO" << endl;
}
return 0;
}