- 方法一:利用数组和循环比较
#include#include 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#include #define MAX_SIZE 100 typedef 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#include 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; }