hdu 1318 Palindromes

题目

这道题的难点在于求镜像串,这道题一共会涉及到的字符共有26+9 个,镜像是用一个一维数组存起来的,要是这35个字符中有字符是镜像串,就把它的镜像字符存到这个一维数组中相应的位置,要是不是就用空格代替。

isalpha( x ),这个函数是用来判断 x 是不是英文字符。

相同的还有:isdigit( x ); 判断 x 是不是数字

 这段代码在紫书上的49页

#include<stdio.h>
#include<ctype.h>
#include<string.h>
const char* msg[]={
		 "not a palindrome",//不是回文串 也不是 镜像串 0
		  "a regular palindrome",//是回文串 不是 镜像串 1
 		 "a mirrored string",//不是回文串 是 镜像串  2
		 "a mirrored palindrome"//回文串 镜像串        3
	};
char rev[]="A   3  HIL JM O   2TUVWXY51SE Z  8 ";
char mirr(char ch)
{
	if(isalpha(ch)) return rev[ch-'A'];
	return rev[ch-'0'+25];
}
int main()
{
	char str[30];
	while(scanf("%s",str)==1)
	{
		int len = strlen(str);
		int p=1,m=1;
		for(int i=0;i<(len+1)/2;i++)
		{
			if(str[i]!=str[len-1-i]){//判断是否是回文串
				p=0;
			}

			if(mirr(str[i])!=str[len-1-i]){//判断是否是镜像串
				m=0;
			}
		}
		printf("%s -- is %s.

",str,msg[2*m+p]);
	}
	return 0;
}


原文地址:https://www.cnblogs.com/qie-wei/p/10160256.html