如何判断一个字符串是否是回文串?

问题描述

给定一个字符串,判断它是否是一个回文串。回文串是指正读和反读都一样的字符串,例如"madam",“racecar”,"上海自来水来自海上"等。编写一个C语言函数,输入一个字符串,输出它是否是一个回文串。

解决方案

解决这个问题的思路是,使用两个指针,分别从字符串的头和尾开始向中间移动,比较它们指向的字符是否相等。如果不相等,就说明字符串不是回文串,返回0。如果相等,就继续移动指针,直到它们相遇或者交错,说明字符串是回文串,返回1。

代码

下面是用C语言实现的代码,其中有注释说明每一步的作用。

#include <stdio.h>
#include <string.h>

// 定义一个函数,输入一个字符串,输出它是否是一个回文串
int is_palindrome(char *str) {
    // 获取字符串的长度
    int len = strlen(str);
    // 定义两个指针,分别指向字符串的头和尾
    char *left = str;
    char *right = str + len - 1;
    // 当左指针小于等于右指针时,循环比较它们指向的字符
    while (left <= right) {
        // 如果左指针和右指针指向的字符不相等,说明字符串不是回文串,返回0
        if (*left != *right) {
            return 0;
        }
        // 如果相等,就把左指针向右移动一位,右指针向左移动一位
        left++;
        right--;
    }
    // 如果循环结束,说明字符串是回文串,返回1
    return 1;
}

// 主函数,用于测试
int main() {
    // 定义一个字符串
    char str[100];
    // 提示用户输入一个字符串
    printf("请输入一个字符串:\n");
    // 从标准输入读取一个字符串
    scanf("%s", str);
    // 调用函数,判断字符串是否是回文串
    int result = is_palindrome(str);
    // 输出结果
    if (result == 1) {
        printf("字符串是回文串\n");
    } else {
        printf("字符串不是回文串\n");
    }
    // 返回0,表示程序正常结束
    return 0;
}

运行结果1:

运行结果2:

可以看见,程序会判断输入的字符串是否为回文串并输出判断结果。

总结

本文介绍了如何用C语言解决一个简单的字符串问题,即判断一个字符串是否是回文串。我们使用了双指针法,从字符串的头和尾开始向中间移动,比较它们指向的字符是否相等。这种方法可以有效地减少不必要的比较次数,提高算法的效率。这个算法的时间复杂度是O(n),空间复杂度是O(1)。判断回文串是一个常见的字符串操作,它在很多场合都有应用,例如密码学,数据压缩,生物信息学等。我们可以通过这个例子,学习如何用C语言处理字符串,以及如何用指针操作字符。希望这篇博客对你有所帮助。谢谢!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值