首页 > 其他 > 详细

Palindromes

时间:2021-01-24 18:21:05      阅读:24      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

解析:该题分为两个部分,一个是判断是否为回文数,一个是判断是否为镜像数

回文数:利用循环判断前面的字符和该字符对称的后面字符是否一致,如果遇到不一致就不是回文数

镜像数:利用循环判断前面字符的镜像字符和该字符对称的字符是否一致,如果遇到不一致就不是镜像数

 

 了解ctype头文件,该题中用到了isalpha,这是用于判断该字符是否是字母,除此之外还有很多方便的函数详见

https://blog.csdn.net/qq_23827747/article/details/79705576?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161146821116780261998556%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161146821116780261998556&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-79705576.pc_search_result_cache&utm_term=ctype.h&spm=1018.2226.3001.4187

代码如下:

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

char rev[] = { "A   3  HIL JM O   2TUVWXY51SE Z  8 " };//每一个字符的镜像字符放在一个数组中,每个字符减去A得到下标,这个数组的下标就是该字符的镜像字符

char sim(char c) //求出镜像数并返回
{
    if (isalpha(c))return rev[c - A];
    else return rev[c - 0 + 25];
}


int main(void)
{
    const char* msg[] = { "is not a palindrome.","is a regular palindrome.","is a mirrored string.","is a mirrored palindrome." };//需要用const,因为数组中存放的都是指针,给出的字符串是const char*类型所以需要const
    char ch[999];
    
    while (scanf("%s", ch) == 1)
    {
        int q = 1, w = 1;//用于判断是否为回文数和镜像数
        int len = strlen(ch);
        int i;
        for (i = 0; i < (len + 1) / 2; i++)
        {
            if (ch[i] != ch[len - 1 - i]) q = 0;//判断前后字符是否一致
            if (sim(ch[i]) != ch[len - 1 - i]) w = 0;//判断前面的镜像字符是否和后面字符一样
        }
        printf("%s -- %s\n\n", ch, msg[w * 2 + q]);
    }
    return 0;
}

 

Palindromes

原文:https://www.cnblogs.com/loliconsk/p/14320764.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!