(C语言)判断中文是否为回文 (例如:上海自来水来自海上)

问题分析

        回文即两端对称的一种结构,可以是数字,如 123321;可以是字符,如: asdfdsa;也可以是中文 ,如:上海自来水来自海上。

        那么数字我们可以读取每个位置上的数进行比较;字符可以逐个读取字符判断;那么中文呢?由于在不同的编码方式,存储汉字所占的字节数不同,因此判断中文是否是回文时虽然也是分别对比,但是对字节数的变动需特别注意。如下图所示。

(C语言)判断中文是否为回文 (例如:上海自来水来自海上)_第1张图片

代码实现

        说明:以一个汉字占2字节为例。

//导入头文件
#include 
#include 
#include 

//主函数
int main(){
	int a,b,i;
    char string[100];
    printf("请输入中文语句:\n");
    gets(string);//获取字符串
    printf("%s",string);//输出字符串信息 
    int len=strlen(string);//获取字符串长度
    bool yes=false;
    for(i=0;i<=len/2;i+=2){
    	//中文每个字符占 2 字节,取首末字符向中间移动比较
        a=i;b=len-i;
        unsigned tcharFront1=string[a];
        unsigned tcharFront12=string[a+1];
        unsigned tcharRear2=string[b-1];
        unsigned tcharRear1=string[b];
        if(tcharFront1==tcharRear2 && tcharFront12==tcharRear1) 
            yes=true;
        else{   
            yes=false;
            break;
        }
    }      
    if(yes){
    	printf(" 是回文\n");
	}else{
		printf(" 是回文\n");
	}
	return 0;
}

运行结果

(C语言)判断中文是否为回文 (例如:上海自来水来自海上)_第2张图片

 

你可能感兴趣的