c语言判断回文串
判断一个字符串是否是回文串是编程中经常遇到的问题之一,C语言中可以通过两种常见的方法来判断一个字符串是否是回文串:递归法和迭代法。下面我们将详细介绍这两种方法,并给出它们的代码实现。
1. 递归法判断回文串:
递归法是一种简单直观的思路,它可以通过逐个对比字符串的首尾字符来判断字符串是否是回文串。
首先,我们需要定义一个递归函数来实现字符串的对比。该函数接受两个参数,分别是字符串和两个索引值,表示当前对比的字符位置。函数的返回值为布尔类型,表示字符串是否是回文串。
具体的实现思路如下:
1. 如果字符串长度为0或1,直接返回true,因为长度为0或1的字符串一定是回文串。
2. 如果字符串的首尾字符不相等,直接返回false,因为首尾字符不相等的字符串一定不是回文串。
3. 如果字符串的首尾字符相等,那么递归调用函数,对比当前位置的下一个和上一个位置的字符。如果两个字符不相等,返回false;如果两个字符相等,继续递归对比下一个位置的字符。
4. 递归的终止条件是首尾字符位置相遇或交叉。
下面是代码实现:
c
#include <stdio.h>
#include <stdbool.h>
bool isPalindromeRecursive(char str[], int start, int end) {
// 终止条件,首尾字符位置相遇或交叉
if (start >= end) {
return true;
}
// 首尾字符不相等,返回false
if (str[start] != str[end]) {
return false;
}
// 递归调用,对比下一个位置的字符
return isPalindromeRecursive(str, start + 1, end - 1);
}
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
bool result = isPalindromeRecursive(str, 0, strlen(str) - 1);
if (result) {
printf("%s 是回文串\n", str);
} else {
printf("%s 不是回文串\n", str);
}
return 0;
}
2. 迭代法判断回文串:
迭代法是一种更加高效的方法,它通过使用两个指针从字符串的首尾位置向中间移动来判断字符串是否是回文串。
具体的实现思路如下:
1. 设置两个指针start和end,分别指向字符串的首尾字符。
2. 将start和end位置的字符进行对比,如果不相等,直接返回false;如果相等,将start指针向后移动一位,将end指针向前移动一位,继续对比下一对字符。
3. 重复步骤2,直到start指针和end指针相遇或交叉。
下面是代码实现:
c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isPalindromeIterative(char str[]) {
int start = 0;
int end = strlen(str) - 1;
while (start < end) {
if (str[start] != str[end]) {
return false;
}
start++;
end--;
}
字符串长度判断 return true;
}
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
bool result = isPalindromeIterative(str);
if (result) {
printf("%s 是回文串\n", str);
} else {
printf("%s 不是回文串\n", str);
}
return 0;
}
综上所述,通过递归法和迭代法我们可以判断一个字符串是否是回文串。两种方法的原理相似,都是通过对比字符串的首尾字符来逐步判断字符串是否是回文串。递归法通过递归调用函数来实现对比,而迭代法通过使用两个指针来实现对比。两种方法各有优劣,具体使用哪种方法取决于实际需求和个人喜好。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论