代码:
开始忘考虑‘0’字符不是有效字符了,WA了2次,然后又发现mirroredstring中的for(i=0;i<len;i++)写成了for(i=0;i<len/2;i++)调了半天才发现这个错误。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int palindrome(char *str);
int mirroredstring(char *str);
int main(void)
{
char str[30];
memset(str,0,sizeof(str));
while(scanf("%s",str)!=EOF)
{
if (palindrome(str))
{
if (mirroredstring(str))
printf("%s -- is a mirrored palindrome.",str);
else
printf("%s -- is a regular palindrome.",str);
}
else
{
if (mirroredstring(str))
printf("%s -- is a mirrored string.",str);
else
printf("%s -- is not a palindrome.",str);
}
memset(str,0,sizeof(str));
printf("\n\n");
}
return 0;
}
int palindrome(char *str)
{
int i=0;
int len=strlen(str);
for(i=0;i<len/2;i++)
{
if (str[i]!=str[len-1-i])
{
return 0;
}
}
return 1;
}
int mirroredstring(char *str)
{
char *reverse="A 3 HIL JM O 2TUVWXY51SE Z 8 ";
int i;
int len=strlen(str);
for(i=0;i<len;i++)
{
if (!isupper(str[i])&&!isdigit(str[i])||str[i]=='0')
{
return 0;
}
if (isupper(str[i]))
{
if (str[len-i-1]!=reverse[str[i]-'A'])
{
return 0;
}
}
if (isdigit(str[i]))
{
if (str[len-i-1]!=reverse[str[i]-'1'+26])
{
return 0;
}
}
}
return 1;
}