C语言——oj刷题——回文字符串

简介: C语言——oj刷题——回文字符串

问题:


实现一个函数,判断一个字符串是否为回文字符串。


回文字符串是指正读和反读都相同的字符串。例如,"level"、"radar"和"madam"都是回文字符串。


要解决这个问题,我们可以使用两个指针分别指向字符串的首尾字符,然后逐步向中间移动,同时比较指针所指向的字符是否相等。如果在比较过程中发现不相等的字符,那么该字符串就不是回文字符串。


下面是一个示例代码,演示如何通过C语言实现判断回文字符串的函数:

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
 
bool isPalindrome(const char *str) {
    int left = 0; // 左指针
    int right = strlen(str) - 1; // 右指针
 
    while (left < right) {
        if (str[left] != str[right]) {
            return false; // 如果字符不相等,则不是回文字符串
        }
        left++; // 左指针向右移动
        right--; // 右指针向左移动
    }
 
    return true; // 如果所有字符都相等,则是回文字符串
}
 
int main() {
    const char *str1 = "level";
    const char *str2 = "hello";
 
    if (isPalindrome(str1)) {
        printf("%s is a palindrome.\n", str1);
    } else {
        printf("%s is not a palindrome.\n", str1);
    }
 
    if (isPalindrome(str2)) {
        printf("%s is a palindrome.\n", str2);
    } else {
        printf("%s is not a palindrome.\n", str2);
    }
 
    return 0;
}

在上述代码中,isPalindrome函数接受一个指向常量字符的指针str作为参数,并返回一个布尔值。函数内部,我们使用left和right两个指针分别指向字符串的首尾字符。然后,通过一个循环,我们逐步将左指针向右移动,右指针向左移动,并比较指针所指向的字符是否相等。如果在比较过程中发现不相等的字符,那么该字符串就不是回文字符串,我们返回false。如果循环结束后没有发现不相等的字符,那么该字符串就是回文字符串,我们返回true。


在main函数中,我们定义了两个字符串str1和str2,并分别调用isPalindrome函数来判断它们是否为回文字符串。根据返回的结果,我们打印相应的提示信息。


这个算法的时间复杂度是O(n),其中n是字符串的长度。因为我们需要遍历字符串的一半来进行比较,所以算法的效率是非常高的。

相关文章
|
6月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
4月前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
30 0
|
6月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
6月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
6月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
100 0
|
8月前
|
C语言
C语言刷题(函数)
C语言刷题(函数)
|
8月前
|
C语言
C语言刷题(循环结构程序设计)
C语言刷题(循环结构程序设计)
|
C语言
C语言OJ项目参考(1039) 小球自由下落
(1039) 小球自由下落 Description 一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。它在第N次落地时反弹多高?共经过多少米?保留两位小数 Input M N Output 它在第N次落地时反弹多高?共经过多少米?保留两位小数,空格隔开,放在一行 Sample Input 1000 5 Sample Output 31.25 2875.00
1454 0
|
1月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
62 23
|
1月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
66 15