方法一:利用数组和循环比较
#include <stdio.h>#include <string.h>int isPalindrome(char *str) { int len = strlen(str); for (int i = 0; i < len / 2; i++) { if (str[i] != str[len - i - 1]) { return 0; } } return 1;}int main() { char str[100]; printf("请输入一个字符串:"); scanf("%s", str); if (isPalindrome(str)) { printf("%s 是回文字符串\n", str); } else { printf("%s 不是回文字符串\n", str); } return 0;}方法二:利用栈的特性#include <stdio.h>#include <string.h>#define MAX_SIZE 100typedef struct { char data[MAX_SIZE]; int top;} Stack;void initStack(Stack *s) { s->top = -1;}void push(Stack *s, char c) { s->data[++(s->top)] = c;}char pop(Stack *s) { return s->data[(s->top)--];}int isPalindrome(char *str) { int len = strlen(str); Stack s; initStack(&s); for (int i = 0; i < len / 2; i++) { push(&s, str[i]); } for (int i = len / 2 + len % 2; i < len; i++) { if (str[i] != pop(&s)) { return 0; } } return 1;}int main() { char str[100]; printf("请输入一个字符串:"); scanf("%s", str); if (isPalindrome(str)) { printf("%s 是回文字符串\n", str); } else { printf("%s 不是回文字符串\n", str); } return 0;}方法三:利用递归实现#include <stdio.h>#include <string.h>int isPalindromeRec(char *str, int start, int end) { if (start >= end) { return 1; } if (str[start] != str[end]) { return 0; } return isPalindromeRec(str, start + 1, end - 1);}int isPalindrome(char *str) { int len = strlen(str); return isPalindromeRec(str, 0, len - 1);}int main() { char str[100]; printf("请输入一个字符串:"); scanf("%s", str); if (isPalindrome(str)) { printf("%s 是回文字符串\n", str); } else { printf("%s 不是回文字符串\n", str); } return 0;} 



