习题8-8 判断回文字符串 (20分)

一、需求

  • 本题要求编写函数,判断给定的一串字符是否为“回文”,所谓“回文”是指顺读和倒读都一样的字符串,如“XYZYX”和“xyzzyx”都是回文。
  • 函数接口定义如下
bool palindrome( char *s );
  • 函数palindrome判断输入字符串char *s是否为回文。若是则返回true,否则返回false

二、裁判程序样例

#include 
#include 

#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;
}

/* 你的代码将被嵌在这里 */

三、测试样例

  • 输入样例1
thisistrueurtsisiht
  • 输出样例1
Yes
thisistrueurtsisiht
  • 输入样例2
thisisnottrue
  • 输出样例2
No
thisisnottrue

四、思路分析

  1. 首先定位到字符串的中间位置,举个例子字符串12345和123456就是奇数个与偶数个两种情况,3即为字符串的中间,两个字符串的长度分别为5和6,数值3对应的下标为2,那么有index = (len - 1)/2,其中index是中间元素的下标,len是字符串的总长度。
  2. 利用循环,直到中间下标,头尾相比较,只要有一对不相等的,说明就不是回文串,返回false,全部相等则返回true。

代码是这样的:

bool palindrome( char *s ) {
    int len = strlen(s);
    int n = (len - 1) / 2;
    
    for(int i = 0; i <= n; i++) {
        if(s[i] != s[len-i-1]) {
            return false;
        }
    }
    return true;
}

 

你可能感兴趣的:(习题8-8 判断回文字符串 (20分))