迴文
經典的字符串例題
出現的問題:一開始只考慮到了兩邊的字符的關係,到後來在網上找到測試用例,發現需要如果是奇數需要判斷最中間的符號是否爲鏡像;
#include<stdio.h>
#include<string.h>
int palindrome(char *c)
{
int i;
int flag = 1;
for(i=0;i<strlen(c)/2;i++){
if(c[i]!=c[strlen(c)-i-1]) {
flag=0;
break;
}
}
return flag?1:0;
}
int mirrored(char a[],char *b,char *c)
{
int i,j;
int flag = 1;
for(i=0;i<=strlen(c)/2;i++){
for(j=0;a[j]&&a[j]!=c[i];j++);
if(b[j]!=c[strlen(c)-i-1]) {
flag=0;
break;
}
}
return flag?1:0;
}
int main()
{
char a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
char b[]="A 3 HIL JM O 2TUVWXY51SE Z 8 ";
char c[100];
while(scanf("%s",c)==1){
int m,n;
m=mirrored(a,b,c);
n=palindrome(c);
if(m&&n) printf("%s -- is a mirrored palindrome.\n",c);
else if(m&&!n) printf("%s -- is a mirrored string.\n",c);
else if(n&&!m) printf("%s -- is a regular palindrome.\n",c);
else if(!n&&!m) printf("%s -- is not a palindrome.\n",c);
printf("\n");
}
return 0;
}
也就是說int mirrored(char a[],char *b,char *c)中的i<=strlen(c)/2的大於等於是必要的,我們需要判斷最中間的那個符號。
最後In addition, after each output line, you must print an empty line.
附上少許測試用例:
MAIAM
MAIAM -- is a mirrored palindrome.
A
A -- is a mirrored palindrome.
A -- is a mirrored palindrome.
B
B -- is a regular palindrome.
B -- is a regular palindrome.
AGA
AGA -- is a regular palindrome.