UVA 401 Palindromes 回文串和镜像串

     哎,今天真是郁闷的一天,各种姿势被题虐,更被学校的杰神嘲笑,,虽然他确实很厉害(PS:我自己却很弱)、、、、 为了赶上他,我还是一点一点慢慢的努力吧。。。


LRJ 紫书第三章的一个例题,其实没有设计什么过多的算法,只是为了让大家对于字符串有一个很好的认识,知道在解决以后有关于字符串的问题的时候,都必须有意识和无意识的把ASCII码表打在脑子中,,,有两个地方需要学习的,其实就是 ch-‘0’ 则得到的是一个数字,ch-‘A’,其实得到的也是一个数字,也就是说,字符变量在进行运算的过程中,常常被先转化成为数字来进行运算的 ,自然而然得到的结果也就是一个数字了~

还有就是关于回文串和镜像串的说明,


什么是回文串呢,回文串就是一个这样的字符串,如果我们对于一个xxxxx正着读,得到字符串A,然后在对它从尾部到头,反过来读,得到一个字符串B,并且A=B,那么就是一个回文串,其实和回文数字是一个道理(说到这里又想起来了那场BC的回文数字,被杰神3分钟出来,,自己无脑的写了半小时的暴力,调了14分钟,最后45分钟的时候才过,真心感觉自己弱爆了,没办反,在我们学校本来就是弱者被人嘲笑,强者被人追捧~ TAT  )。。。

那什么有是镜像串呢?其实要说镜像,我们就知道了,对一个串进行一个完全的翻转,得到与原串相同的情况,也就是说左右镜像之后和原串相同,我们就得到了镜像串的定义。  来给你列出几个镜像串来,2S和3AIAE 就是镜像串。。具体怎么回事脑补一下,题目中也有一个表让你来查,自然就降低了解决问题的难度了。



# include<cstdio>
# include<iostream>
# include<cstring>
//# include<ctype.h>
# include<cstdlib>
# include<algorithm>


using namespace std;

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'];
    }
    else
    {
        return rev[ch-'0'+25];
    }
}


int main(void)
{
    char s[100];
    while ( scanf("%s",s)==1 )
    {
        int n = strlen(s);
        int p = 1;
        int m = 1;
        for ( int i = 0;i < (n+1)/2;i++ )
        {
            if ( s[i]!=s[n-i-1] )
            p = 0;
            if ( r(s[i]) != s[n-i-1])
            m = 0;
        }

        printf("%s -- is %s.\n\n",s,msg[m*2+p]);
    }

    return 0;
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值