题干很清楚,镜像和回文都是通过对字符串的头尾依次判断在一定条件下是否相等,主要就是一个for循环
for(int i=0;i<(strlen(str)+1)/2;i++)
{
if(function(str[i])!=str[strlen(str)-i-1])bool **=false;
}
不过镜像串可能有点麻烦,可以用两个辅助数组来存储这两组信息,一个是未镜像字符,一个是对应的镜像字符。
char unMirrored[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
char mirrored[] ="A 3 HIL JM O 2TUVWXY51SE Z 8 ";
查找未镜像字符串来找到镜像字符,如果返回为空格,则直接判定不是镜像串
代码
#include<stdio.h>
#include<string.h>
char unMirrored[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
char mirrored[] ="A 3 HIL JM O 2TUVWXY51SE Z 8 ";
char GetMirrored(char ch)
{
int i;
for(i=0;unMirrored[i]!=ch;i++);
return mirrored[i];
}
int main()
{
char str[100];
while(scanf("%s",str)!=EOF)
{
bool isPalindrome=true,isMirrored=true;
for(int i=0;i<(strlen(str)+1)/2;i++)
{
if(str[i]!=str[strlen(str)-i-1])isPalindrome=false;
if(GetMirrored(str[i])==' ')isMirrored=false;
if(GetMirrored(str[i])!=str[strlen(str)-i-1])isMirrored=false;
}
if(!isPalindrome&&!isMirrored)printf("%s -- is not a palindrome.\n\n",str);
if(isPalindrome&&!isMirrored)printf("%s -- is a regular palindrome.\n\n",str);
if(!isPalindrome&&isMirrored)printf("%s -- is a mirrored string.\n\n",str);
if(isPalindrome&&isMirrored)printf("%s -- is a mirrored palindrome.\n\n",str);
}
return 0;
}