哎,今天真是郁闷的一天,各种姿势被题虐,更被学校的杰神嘲笑,,虽然他确实很厉害(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;
}