1.需求描述输入一个字符串,编写程序判断该字符串是否为回文。为了描述方便,将输入的字符串分为中文字符串和非中文字符串。其中,汉字串只包含汉字,非汉字串不包含汉字。所谓回文串是指正读和反读相同的字符串。下面举几个例子来说明:1、“级”是一个非汉字的回文串,因为正读和反读都是“级”。2、“好”不是非汉字的回文。3、“我爱我”是一串回文汉字,因为顺读和逆读都是“我爱我”。4、“我爱你”不是回文汉字串。2.算法设计判断非汉字的回文串比较简单。我们只需要以字符串的中间为原点,比较前后对应的字符是否相等即可;但是汉字回文串的判断就比较复杂了。一点,因为一个汉字占两个字节,所以我们不能用判断非汉字回文串的方法,而是应该先分别获取每一个汉字,然后比较这两个字符是否相等。程序总体流程如图1所示。图1程序总体流程3.特殊流程注意事项在编写程序的过程中,我们需要考虑输入字符串的长度和格式,如:1.如果输入的字符串只有一个字符,那么程序直接返回,不执行后续处理,因为回文串中至少有两个或两个以上的字符。2、如果输入的中文字符串中包含非中文字符,或者输入的非中文字符串中包含中文字符,则程序直接返回,不执行后续处理。4.程序代码/***************************************************************************Copyright(C)2016,ZhouZhaoxion.**文件名:PalindromicString.c*文件ID:无*内容概要:回文判断*其他说明:像madam,php,2992,1234321这样的字符串是回文串*当前版本:V1.0*作者:周兆雄*完成日期:20160222***************************************************************************/#include//重新定义数据类型typedefsignedcharINT8;typedefintINT32;typedefunsignedintUINT32;//全局变量声明,用于存储汉字,***支持100个汉字INT8gszStrCharArray[101][5]={0};UINT32giCharNum=0;//函数声明voidJudgePalindromicString(INT8*pszInputStr,UINT32iInputStrLen,UINT32iStrType);voidGetChineseChars(INT8*pszInputStr);INT32JudgeStrFormat(INT8*pszInputStr,UINT32iStrType);/********************************************************************************函数说明:主要函数*输入参数:无*输出参数:无*返回值:0-执行成功其他-执行失败*其他说明:无*修改日期版本号修改人修改内容*----------------------------------------------------------------------*20160222V1.0周兆雄制作***************************************************************************/INT32main(){UINT32iStrType=0;INT32iRetVal=0;INT8szInputStr[100]={0};printf("请输入字符串类型(1:汉字string,2:非中文字符串):\n");scanf("%d",&iStrType);printf("请输入字符串:\n");scanf("%s",szInputStr);//判断输入的字符串是中文字符串还是非中文字符串iRetVal=JudgeStrFormat(szInputStr,iStrType);if(iRetVal!=0){return-1;}if(iStrType==1)//如果输入是一个中文字符串,然后先获取每个汉字{GetChineseChars(szInputStr);if(giCharNum<=1)//只输入一个字符,直接返回{printf("%shasonlyonecharacter,pleasecheck!\n",szInputStr);return-1;}}elseif(iStrType==2){if(strlen(szInputStr)<=1)//只输入一个字符,直接返回{printf("%shasonlyonecharacter,pleasecheck!\n",szInputStr);return-1;}}//判断输入字符串是否为回文JudgePalindromicString(szInputStr,strlen(szInputStr),iStrType);return0;}/**************************************************************************函数说明:判断输入字符串是否为回文*输入参数:pszInputStr-输入字符串iInputStrLen-输入字符串长度iStrType-输入字符串类型*输出参数:无*返回值:无*其他说明:无*修改日期版本号修改人修改内容*--------------------------------------------------------------------*20160222V1.0ZhouZhaoxion创建****************************************************************************/voidJudgePalindromicString(INT8*pszInputStr,UINT32iInputStrLen,UINT32iStrType){UINT32iPosFlag=0;if(NULL==pszInputStr){return;}if(iStrType==1)//中文字符串{for(iPosFlag=0;iPosFlag=0)//不小于0表示包含非汉字{printf("%shasnon-Chinesecharacter,pleasecheck!\n",pszInputStr);return-2;}}}elseif(iStrType==2)//再次判断非中文字符串{for(iPosFlag=0;iPosFlag