回文词判断

这篇文章介绍了如何使用C语言编写程序,判断输入的字符串是否为回文串(正反读都一样)和镜像串(左右对称)。通过ASCII值映射和字符串处理实现这两个功能。
摘要由CSDN通过智能技术生成

//输入一个字符串,判断是否为回文串以及镜像串。
//输入是一个字符串,判断它是否为回文串以及镜像串。输入字符串保证不含数字0 00 。
//所谓回文串,就是反转以后和原串相同,如a b b a abbaabba 和m a d a m madammadam 。
//所谓镜像串,就是左右镜像之后和原串相同,如2 S 2S2S 和3 A I A E 3AIAE3AIAE 。注意,并不是每个字符在镜像之后都能得到一个合法字符。
//在本题中,每个合法字符的镜像如下表所示:
//————————————————
//Character   Reverse
//A           A
//E           3
//H           H
//I           I
//J           L
//L           J
//M           M
//O           O
//S           2
//T           T
//U           U
//V           V
//W           W
//X           X
//Y           Y
//Z           5
//1           1
//2           S
//5           Z
//8           8
//————————————————
//输入
//NOTAPALINDROME
//NOTAPALINDROME -- is not a palindrome.//不是回文词
 
//ISAPALINILAPASI
//ISAPALINILAPASI -- is a regular palindrome.//回文串
 
//2A3MEAS
//2A3MEAS -- is a mirrored string.//镜像串
 
//ATOYOTA
//ATOYOTA -- is a mirrored palindrome.//回文词


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

const char* rev = "A 3 HIL JM O 2TUVWXY51SE Z 8";  //是镜像串的例子 ,数字要把它再镜像成  //字母看,按照ASCII 的顺序的排列的,
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'];//判断参数c是否为字母,isalpha函数的参数是int c,是整数,不是字符,
    //在C语言中,字符就是整数。
    return rev[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;
}

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值