用c++编写一个回文是指正读和反读均相同的字符序列,如”abba”和”abdba”均是回文,但”good”不是回文,试写一算法利用栈判定给定的字符序列是否为回文。(提示:将一半字符入栈)
时间: 2023-10-30 22:27:28 浏览: 60
C++判断一串字符是否为回文源程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct {
char data[MAXSIZE];
int top;
} Stack;
void InitStack(Stack *S) {
S->top = -1;
}
int StackEmpty(Stack S) {
return S.top == -1;
}
int StackFull(Stack S) {
return S.top == MAXSIZE - 1;
}
int Push(Stack *S, char x) {
if (StackFull(*S)) {
return 0;
}
S->data[++S->top] = x;
return 1;
}
char Pop(Stack *S) {
if (StackEmpty(*S)) {
return '\0';
}
char x = S->data[S->top--];
return x;
}
int Palindrome(char *str) {
Stack S;
InitStack(&S);
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
Push(&S, str[i]);
}
int j;
if (len % 2 == 0) {
j = len / 2;
} else {
j = len / 2 + 1;
}
while (j < len) {
char x = Pop(&S);
if (x != str[j]) {
return 0;
}
j++;
}
return 1;
}
int main() {
char str[MAXSIZE];
printf("请输入一个字符串:");
scanf("%s", str);
if (Palindrome(str)) {
printf("是回文。\n");
} else {
printf("不是回文。\n");
}
return 0;
}
阅读全文