C语言刷题系列——12.判断回文字符串

简介: C语言刷题系列——12.判断回文字符串

🌲一) 题目要求


描述

要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。

函数接口定义

bool palindrome( char *s );


函数palindrome判断输入字符串char *s是否为回文。若是则返回true,否则返回false

裁判测试程序样例
#include <stdio.h>
#include <string.h>
#define MAXN 20
typedef enum {false, true} bool;
bool palindrome( char *s );
int main()
{
    char s[MAXN];
    scanf("%s", s);
    if ( palindrome(s)==true )
        printf("Yes\n");
    else
        printf("No\n");
    printf("%s\n", s);
    return 0;
}
/* 你的代码将被嵌在这里 */


🌲二) 题解


🌍

返回值是true / false →布尔类型(bool)


思路:

①将字符串从两端依次比较,每比较一个字符,左端的向右移动一个字符,右端的向左移动一个字符。

⭐显然用while循环,每循环依次,左++,右- -

②只要遇到一对字符不相同,就返回false,因此可以一开始int flag = 1,如果存在一对字符不相同,flag = 0。最后再根据flag,return true / false

bool palindrome( char *s )
{
    int len = strlen(s);
    int left = 0,right = len-1;
    int flag = 1;
    while(left<right)
    {
        if(s[left] != s[right])
            flag = 0;
        left++;
        right--;
    }
    if(flag)
        return true;
    else
        return false;
}


🏔优化

其实也不需要像上面的代码这么麻烦,最后还需要再判断一次,

当 s[left] != s[right] 的时候,直接return false。在循环外部return true(显然当字符串为“回文”的时候 if判断的条件不满足,出了循环return true 即可)

代码如下:

bool palindrome( char *s )
{
    int len = strlen(s);
    int left = 0,right = len-1;
    while(left<right)
    {
        if(s[left] != s[right])
            return false;
        left++;
        right--; 
    }
        return true;
}
相关文章
|
2月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
2月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
2月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
2月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
|
4月前
|
C语言
C语言刷题(函数)
C语言刷题(函数)
|
4月前
|
C语言
C语言刷题(数组)
C语言刷题(数组)
|
4月前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
4月前
|
C语言
C语言刷题(循环结构程序设计)
C语言刷题(循环结构程序设计)
|
4月前
|
存储 算法 C语言
【C语言刷题系列】消失的数字
【C语言刷题系列】消失的数字
|
4月前
|
C语言
【C语言刷题系列】轮转数组
【C语言刷题系列】轮转数组