算法入门竞赛回文词

问题描述
输入一个字符串,判断它是否为回文以及镜像串。输入字符串保证不含数字0.所谓回文串,就是反转之后原串相同,如abba和madam。所谓镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。注意,并不是每个字符在镜像之后都能得到一个合法字符,本题中,每个字符的镜像如下所示,(空白项表示该字符镜像后不能得到一个合法的字符)。
#在这里插入图片描述


#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define MAX  100
const char  reverse[]={"A   3  HIL JM O   2TUVWXY51SE Z  8"};
const char *mes[]={"is not a palinadrome","is  a regular palindrome","is a mirroed string","is a mirrored palindrome"};
//mes[0]不是回文串,mes[1]是回文串,mes[2] 是镜像串,mes[3]是镜像回文串 
char r(char a)
{
	if(isalpha(a)) return reverse[a-'A']; 
	else return  reverse[a-'0'+25];
}
int  main()
{
	char  s[MAX];
	scanf("%s",s);
	int len=strlen(s);
	int ok=1;int ook=1;
	for(int i=0;i<(len+1)/2;i++)
	{
		if(s[i]!=s[len-i-1])  ok=0; //不是回文串 
		if(r(s[i])!=s[len-i-1]) ook=0; //不是镜像串 
		
	}
	printf("%s -- %s.\n\n",s,mes[ok+ook*2]);
	return 1;
}

	

猜你喜欢

转载自blog.csdn.net/weixin_43752167/article/details/85246158