判断输入的中文是不是回文

c/c++ | 2015-05-28 15:01:16 | 阅读 2120 次 | 评论(0)

没用字符串函数,采用递归

#include <stdio.h>
#include <string.h>
#include <windows.h>

/**
*判断输入的字符或中文字符是不是回文,如:你是谁是你,你是谁谁是你,abccba,abcba,a你好好你a
*@str:字符数组
*@i:数组下标
*@flag:返回判断,为1是回文,为0不是
*@n:字符总字节数
*/
void checkcn(char* str,int i,int* flag,int n);

/*主函数*/
int main(void){

	char str[100];
	int flag =0,i=0;
	printf("请输入一串字符:\n");
	gets(str);

	do{
		//中文字符占两个字节,且每个字节asc码值小于0
		if(str[i] < 0 && str[i+1] < 0){
			i += 2;
			flag = 1;
		}else{
			i++;
		}
	}while(str[i] != '\0');
		checkcn(str,0,&flag,i);
	//printf("%d\n",flag);
	if(flag == 1){
		printf("您输入的是回文\n");
	}else{
		printf("您输入的不是回文\n");
	}
	system("pause");
	return 0;
}

void checkcn(char* str,int i,int* f,int n){
	if(str[i] < 0 && str[i+1] < 0){
		if(str[i] == str[n-i-2] && str[i+1] == str[n-i-1]){
			i +=2;
			checkcn(str,i,f,n);
		}else{
			*f = 0;
			return;
		}
	}else{
		if(str[i] == str[n-i-1]){
			i++;
			checkcn(str,i,f,n);
		}else{
			*f = 0;
			return;
		}
	}

	if(i > n/2){
		*f = 1;
		return;
	}
}

 

文章评论,共0条
游客请输入验证码
浏览42837次