📌  相关文章
📜  使用指针检查字符串在C中是否是回文(1)

📅  最后修改于: 2023-12-03 15:36:39.650000             🧑  作者: Mango

使用指针检查字符串在C中是否是回文

概述

回文是一个字符串,如果正序和倒序读取都是相同的,则称其为回文。例如,"level"和"racecar"都是回文。本文将介绍如何使用指针检查字符串在C中是否是回文。

解决方案

要检查一个字符串是否是回文,我们需要遍历字符串的前半部分并将它反转,然后与字符串后半部分进行比较。如果两个部分完全相同,则该字符串是回文,否则它不是。

步骤1:计算字符串长度

在C中,字符串以零结尾,因此我们可以使用C函数strlen()来计算字符串的长度。

size_t len = strlen(str);
步骤2:反转字符串的前半部分

我们使用两个指针来遍历字符串的前半部分。一个指针指向字符串的起始位置,另一个指针指向字符串的中间位置。我们使用一个循环交换这两个指针所指向的字符,并依次向中间移动这两个指针,直到达到字符串的中间位置。

char *start = str;
char *end = str + len - 1;

while (start < end) {
    char tmp = *start;
    *start++ = *end;
    *end-- = tmp;
}
步骤3:比较字符串的前半部分和后半部分

现在我们已经反转了字符串的前半部分。我们使用两个指针来比较前半部分和后半部分。一个指针指向字符串的起始位置,另一个指针指向字符串的结尾位置。我们依次将这两个指针所指向的字符进行比较,并依次向中间移动这两个指针,直到达到字符串的中间位置。

如果所有字符都相等,则该字符串是回文,否则它不是。

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中是否是回文。我们使用两个指针来遍历字符串的前半部分和后半部分,并依次将它们进行比较。如果所有字符都相等,则该字符串是回文,否则它不是。