#include <stdio.h>
#include <string.h>
#include <ctype.h>//头文件定义isalpha
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))//isalpha判断字符是否为字母
return rev[ch-'A'];//返回字母本身序号0
return rev[ch-'0'+25];
}
int main(int argc, char argv[])
{
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[m2+p]);
}
return 0;
}
for (int i = 0; i < (len + 1) / 2; i++){
这里 i <(len+1) 的含义是 只需要遍历输入字符串s一半字符,比如输入 abccba 那么i的遍历 范围是0 到 2也就是 前面abc, 只遍历一半的原因是下面的比较语句是按照第一个和最后一个比较 第二个和倒数第二个比较。。。的规则
if (s[i] !=s[len-1-i])
p=0;
s[i]始终是前半段的字符,s[len-1-i] 始终是后半段字符 比如输入 abccba 那么比较如下
i <(len + 1) /2 ==> i < 3
那么i的遍历下标为 0 1 2 然后退出循环
if(s[0] == s[5]) ==> if('a' == 'a')
if(s[1] == s[4]) ==> if('b' == 'b')
if(s[2] == s[3]) ==> if('c' == 'c')
退出