看了一下很多做法,发现还是构建一个常量数组比较简洁。for循环语句中,其实只需要判断一半即可
回文字符串,从左到右读和从右到左读是一样的。比如"pop" 、 “aaaCCaaa”
镜像字符串,字符串中字符镜像和原字符串互逆。比如"2A3MEAS"
#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 del(char c)
{
if (isalpha(c)) return rev[c - 'A'];
else
return rev[c - '0' + 25];
}
int main(void)
{
char str[50];
while(scanf("%s", str) == 1)
{
int len, m = 1, p = 1, i;
len = strlen(str);
for(i = 0; i < (len + 1)/ 2; i++)
{
if (str[i] != str[len-1-i]) p = 0;
if (del(str[i]) != str[len-1-i]) m = 0;
}
printf("%s -- is %s.\n\n", str, msg[m*2+p]);
}
return 0;
}