回文词

题目

输入一个字符串,判断它是否为回文串以及镜像串。输入字符串保证不含数字0.

所谓回文串,就是反转以后和原串相同,如abba和madam。

所谓镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。

注意,并不是每个字符在镜像之后都能得到一个合法字符。

在本题中,每个字符的镜像如图所示(空白符表示该字符镜像之后不能得到一个合法字符)。

输入的每行包含一个字符串(保证只有上述字符。不含空白字符),判断它是否为回文串和镜像串(共4种组合)。

每组数据之后输出一个空行。

样例输入:

NOTAPALINDROME

ISAPALINILAPASI

2A3MEAS

ATOYOTA

样例输出:

NOTAPALINDROME - - is not a palindrome.

ISAPALINILAPASI -- is regular palindrome.

2A3MEAS -- is a mirrored string.

ATOYOTA -- is a mirrored palindrome.

c实现

#include<stdio.h>
#include<string.h>
#include<ctype.h>
const char* rev = "A   3  HIL JM O   2TUVWXY51SE Z  8 "; //常量数组,保存镜像字符 
const char* msg[] = {"not a palindrome","a regular palindrome","a mirrored string","a mirrored palindrome"}; 

char r(char ch){
    if(isalpha(ch)) return rev[ch-'A']; //获取字符在常量数组的下标,取出对应镜像字符,因为这里'A'是数组第一个,可以根据这种方式,ascii编码 
    return rev[ch-'0'+25];    //获取ch(数字)相对于'0'的位置,并且下标在常量数组下为+25 
}

int main()
{
    char s[30];
    while(scanf("%s",s)==1)
    {
        int len = strlen(s);
        int p=1,m=1;
        for(int i=0;i<(len+1)/2;i++){
            if(s[i]!=s[len-1-i]) p=0;
            if(r(s[i])!=s[len-1-i]) m=0;
        }
        printf("%s -- is %s.\n\n",s,msg[m*2+p]);
    }
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 前端学习(40)~js学习(十七):数组的常见方法&数组的遍历

    unshift():在数组最前面插入一个或多个元素,返回结果为该数组新的长度。插入元素后,其他元素的索引会依次调整。

    Vincent-yuan
  • springboot之mybatis

    Orm 框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句 Sql 的 Hibernate,一个是可以灵活调试动态 S...

    Vincent-yuan
  • 前端学习(39)~js学习(十六):数组

    数组的存储性能比普通对象要好。在实际开发中我们经常使用数组来存储一些数据,使用频率非常高。

    Vincent-yuan
  • grep命令及正则表达式

    grep基本概念 grep:global search regular expression and print out the line. 作用:文本过滤器,...

    小小科
  • 新角色 新视野 — 毕马威助力创新创业

    大数据文摘
  • 《javascript数据结构和算法》读书笔记(5):集合

    在创建时有一个细节,使用对象(items)而不是数组来创建集合。但使用数组的话意义似乎不大。

    一粒小麦
  • 贝叶斯分类器

    贝叶斯网亦称“信念网”(belief network),它借助于有向无环图(Directed Acyclic Graph,DAG)来刻画属性之间的依赖关系,并使...

    花鸣溪
  • 程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)

    给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]。 请找出一条直线,其通过的点的数目最多。

    Michael阿明
  • 3.着色语言

    3.着色语言 OpenGL ES 3.0新增加功能 非方矩阵,全整数支持,插值限定符号,统一变量块,局部限定符号,新的内建函数,全循环,全分支支持以及无限的...

    大壮
  • 剑指Offer面试题:30.第一个只出现一次的字符

      最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字...

    Edison Zhou

扫码关注云+社区

领取腾讯云代金券