📅  最后修改于: 2023-12-03 15:36:39.650000             🧑  作者: Mango
回文是一个字符串,如果正序和倒序读取都是相同的,则称其为回文。例如,"level"和"racecar"都是回文。本文将介绍如何使用指针检查字符串在C中是否是回文。
要检查一个字符串是否是回文,我们需要遍历字符串的前半部分并将它反转,然后与字符串后半部分进行比较。如果两个部分完全相同,则该字符串是回文,否则它不是。
在C中,字符串以零结尾,因此我们可以使用C函数strlen()
来计算字符串的长度。
size_t len = strlen(str);
我们使用两个指针来遍历字符串的前半部分。一个指针指向字符串的起始位置,另一个指针指向字符串的中间位置。我们使用一个循环交换这两个指针所指向的字符,并依次向中间移动这两个指针,直到达到字符串的中间位置。
char *start = str;
char *end = str + len - 1;
while (start < end) {
char tmp = *start;
*start++ = *end;
*end-- = tmp;
}
现在我们已经反转了字符串的前半部分。我们使用两个指针来比较前半部分和后半部分。一个指针指向字符串的起始位置,另一个指针指向字符串的结尾位置。我们依次将这两个指针所指向的字符进行比较,并依次向中间移动这两个指针,直到达到字符串的中间位置。
如果所有字符都相等,则该字符串是回文,否则它不是。
start = str;
end = str + len - 1;
while (start < end && *start++ == *end--) {
// do nothing
}
if (start >= end) {
printf("The string is a palindrome.\n");
} else {
printf("The string is not a palindrome.\n");
}
#include <stdio.h>
#include <string.h>
int is_palindrome(char *str) {
size_t len = strlen(str);
char *start = str;
char *end = str + len - 1;
// Reverse the first half of the string.
while (start < end) {
char tmp = *start;
*start++ = *end;
*end-- = tmp;
}
// Compare the first half with the second half.
start = str;
end = str + len - 1;
while (start < end && *start++ == *end--) {
// Do nothing.
}
// If all characters are equal, the string is a palindrome.
if (start >= end) {
return 1;
} else {
return 0;
}
}
int main() {
char str[100];
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
// Strip the newline character.
str[strcspn(str, "\n")] = '\0';
if (is_palindrome(str)) {
printf("\"%s\" is a palindrome.\n", str);
} else {
printf("\"%s\" is not a palindrome.\n", str);
}
return 0;
}
本文介绍了如何使用指针检查字符串在C中是否是回文。我们使用两个指针来遍历字符串的前半部分和后半部分,并依次将它们进行比较。如果所有字符都相等,则该字符串是回文,否则它不是。