1、回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈。) 要求用c++语言
时间: 2023-06-11 14:06:59 浏览: 65
下面是一个用C语言实现的判断回文的算法,利用栈来存储字符序列的一半,然后将另一半与栈中的字符比较,判断是否回文。
```c
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100
int top = -1; // 栈顶指针
char stack[MAXSIZE]; // 定义栈
// 将元素入栈
void push(char c) {
stack[++top] = c;
}
// 将元素出栈并返回出栈元素
char pop() {
if (top == -1) {
return '\0'; // 栈空
} else {
return stack[top--];
}
}
// 判断字符串是否回文
int isPalindrome(char s[]) {
int len = strlen(s);
int mid = len / 2;
int i;
// 将前一半字符入栈
for (i = 0; i < mid; i++) {
push(s[i]);
}
// 判断字符串长度的奇偶性
if (len % 2 != 0) {
i = mid + 1;
} else {
i = mid;
}
// 将后一半字符与栈中的字符比较
while (s[i] != '\0') {
if (s[i] != pop()) {
return 0; // 不是回文
}
i++;
}
return 1; // 是回文
}
int main() {
char s[MAXSIZE];
printf("请输入一个字符串:");
gets(s);
if (isPalindrome(s)) {
printf("%s 是回文\n", s);
} else {
printf("%s 不是回文\n", s);
}
return 0;
}
```
其中,`push()` 函数将元素入栈,`pop()` 函数将元素出栈并返回出栈元素,`isPalindrome()` 函数判断字符串是否回文。在主函数中,首先读入一个字符串,然后调用 `isPalindrome()` 函数进行判断,最后输出结果。