95 回文或镜面回文
作者: Turbo时间限制: 1S章节: 字符串
问题描述 :
给出字符串,判断其是否是回文或镜面回文。
给定一个由数字或字母组成的字符串,如果该字符串正读、反读都一样,则该字符串被称作回文字符串。例如,"ABCDEDCBA"就是回文字符串。
给定一个由数字或字母组成的字符串,将字符串中每个字符转换为对应的镜面字符(有镜面字符)或保持不变(无对应镜面字符),如果转换后的字符串反读的结果与字符串转换前正读的结果相同,则该字符串被称作镜面字符串。例如,"3AIAE"就是镜面字符串。
如果一个字符串既是回文字符串又是镜面字符串,则称该字符串为镜面回文字符串。例如,"ATOYOTA"就是镜面回文字符串。
所有有效字符与其镜面字符见下表:
字符
镜面字符
字符
镜面字符
字符
镜面字符
A
A
M
M
Y
Y
B
N
Z
5
C
O
O
1
1
D
P
2
S
E
3
Q
3
E
F
R
4
G
S
2
5
Z
H
H
T
T
6
I
I
U
U
7
J
L
V
V
8
8
K
W
W
9
L
J
X
X
注意:数字0与字母O视作同一字符,都用字母O表示。
输入说明 :
输入包含多个字符串,每行一个字符串,每个字符串包含1—20个有效字符,保证每个字符串中不会出现非法字符。
输出说明 :
对每个输入的字符串,在第1列输出该字符串并紧跟着输出与下表中标准对应的字符串。每组输出数据后面,必须输出一空行。
输出字符串 标准(含义)
" – is not a palindrome." 该字符串非回文,也非镜面字符串
" – is a regular palindrome." 该字符串是回文,但非镜面字符串
" – is a mirrored string." 该字符串非回文,但是镜面字符串
" – is a mirrored palindrome." 该字符串是回文,也是镜面字符串
输入范例 :
3AIAE
NOTAPALINDROME
AHA
输出范例 :
3AIAE – is a mirrored string.
NOTAPALINDROME – is not a palindrome.
AHA – is a mirrored palindrome.
#include<stdio.h>
#include<string.h>
int isHui(char *a,int n);
int isJing(char *a,int n);
int main(){
char a[21],p,i;
while(scanf("%s",a)!=EOF){
p=0;//p=1表示回文q=1表示镜面
p=strlen(a);
if(isHui(a,p)&&isJing(a,p))
{
for(i=0;i<p;i++)
printf("%c",a[i]);
printf(" -- is a mirrored palindrome.\n");
}else if(!(isHui(a,p))&&isJing(a,p)){
for(i=0;i<p;i++)
printf("%c",a[i]);
printf(" -- is a mirrored string.\n");
}else if(isHui(a,p)&&!(isJing(a,p))){
for(i=0;i<p;i++)
printf("%c",a[i]);
printf(" -- is a regular palindrome.\n");
}else{
for(i=0;i<p;i++)
printf("%c",a[i]);
printf(" -- is not a palindrome.\n");
}
printf("\n");
}
return 0;
}
int isJing(char *a,int n){
int i;
char b[21];
for(i=0;i<n;i++){
switch(a[i]){
case 'E':b[i]='3';break;
case 'J':b[i]='L';break;
case 'L':b[i]='J';break;
case '0':b[i]='O';break;
case 'S':b[i]='2';break;
case 'Z':b[i]='5';break;
case '2':b[i]='S';break;
case '3':b[i]='E';break;
case '5':b[i]='Z';break;
default :b[i]=a[i];break;
}
}
for(i=0;i<n;i++){
if(a[i]!=b[n-1-i]) return 0;
}
return 1;
}
int isHui(char *a,int n){
int i;
for(i=0;i<n/2;i++){
if(a[i]!=a[n-1-i]) return 0;
}
return 1;
}