回文是指正读、反读均相同的字符序列。试设计算法判定给定的字符序列是否为回文(提示:将一半字符入栈)。使用c语言。
时间: 2024-10-14 10:11:06 浏览: 33
aba.rar_ABA_判断以@为结束符的字符串是否_回文序列
判断一个字符串是否为回文可以使用双指针法,一个从前往后移动,另一个从后往前移动,同时检查对应位置的字符是否相等。这里我们也可以利用栈的数据结构,将字符串的一半字符压入栈中,然后逐个与另一半字符对比。以下是C语言的一种实现:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isPalindrome(char str[]) {
int length = strlen(str);
int start = 0;
int end = length - 1;
// 创建一个辅助栈用于存储前半部分字符
char stack[length / 2 + 1];
int top = -1; // 栈顶元素
// 将前半部分字符压入栈中
while (start < end) {
stack[++top] = str[start];
start++;
}
// 双指针比较,一个从栈中出栈,一个从后向前移动
while (start < end) {
if (stack[top--] != str[end]) {
return false;
}
end--;
}
// 如果所有字符都匹配,返回true
return true;
}
int main() {
char str[100];
printf("请输入一个字符串:");
fgets(str, sizeof(str), stdin); // 防止回车字符影响结果
str[strcspn(str, "\n")] = '\0'; // 移除fgets获取的换行符
if (isPalindrome(str)) {
printf("%s 是回文\n", str);
} else {
printf("%s 不是回文\n", str);
}
return 0;
}
```
阅读全文