回文指的是,类似EVEVE,正序和反序相同的字符串
算法思想:
设立两个字符串指针p,q。
p指针指向字符串首地址,q指向字符串尾地址(其实就是首地址加上字符串长度(len)减1,地址是从0开始计算,所以需要减1计算)
判断头尾指针指向的字符是否相等(注意是*p和*q,是指向字符串中的字符,并不是指向字符串,这里需要注意),如果相等,指针向内移动,即(p--,q++),再次调用函数(直到两个指针即将相交时,即判断到最里面一对字符相等识,结束程序,返回结果:真)。如果不相等,结束程序,即产生结果:假。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//主函数,执行函数
int main() {
char str[30],*p=str;
int ispla;//回文判断
char *q;
int plaindrome(char *p,char *q);
scanf("%s",p);
len=strlen(p);
q=p+len-1;//尾地址
ispla=plaindrome(p,q);
if(ispla==1){
printf("是");
}else{
printf("不是");
}
}
//回文判断函数
int plaindrome(char *p,char *q){
int flag;
if(p>q){
flag=1;
return flag;
}
if(*p==*q){
p++;
q--;
//printf("匹配,下一个\n");
plaindrome(p,q);
}else{
//printf("不匹配,结束\n");
flag=0;
return flag;
}
}