作者在 2015-05-28 15:01:16 发布以下内容
没用字符串函数,采用递归
#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;
}
}