题目:4种情况, 判断是否为回文, 是否为镜面对称。
#include <stdio.h>
#include <string.h>
int p(char str[]) //是否为回文
{
int i;
for(i=0; i<strlen(str)/2; i++)
{
if(str[i]!=str[strlen(str)-i-1])
{
return 0;
break;
}
}
return 1;
}
char ch[]="AEHIJLMOSTUVWXYZ12358";
char re[]="A3HILJMO2TUVWXY51SEZ8";
int m(char str[]) //是否为镜面
{
int table_len = strlen(ch);
int i,j,len = strlen(str);
if(len == 1)
{
for(j=0; j<table_len; j++)
{
if(ch[j] == str[0])
break;
}
if(j == 21 || re[j] != str[0]) //判断是否有相同的或是镜面所对应过去的是否也相等
return 0;
}
else if(len > 1)
{
for(i=0; i<len/2; i++)
{
for(j=0; j<table_len; j++)
{
if(ch[j] == str[i])
break;
}
if(j == 21 || re[j] != str[len-i-1]) //判断是否有相同的或是镜面所对应过去的是否也相等
return 0;
}
}
return 1;
}
int main()
{
char str[101], i;
while(1)
{
if(gets(str)==NULL) break;
printf("%s -- is ",str);
if(p(str)==1 && m(str)==1) printf("a mirrored palindrome.\n\n");
else if(p(str)==1 && m(str)==0) printf("a regular palindrome.\n\n");
else if(p(str)==0 && m(str)==1) printf("a mirrored string.\n\n");
else if(p(str)==0 && m(str)==0) printf("not a palindrome.\n\n");
}
}