#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CH "%c"
#define DG "%d"
//求最长的回文字串 判断回文不算符号
//但是最后输出的时候需要计算符号
//样例输入
//She say:Madam,I'm Adam.
//样例输出
//Madam,I'm Adam
int isHui(char str[],int start, int endi);
int isLetter(char ch);
int charEqual(char ch1,char ch2);
int main()
{ int maxLength=0;
int maxStart=0;
//char str[]="abbdcd:aa?dcbcdc";
char str[]="She say:Madam,I'm Adam";
int i=0;
//求最长的符合某条件的字串
//首先应得到所有子串
//从第一个字母开始的子串有ab abb abbd ..
//从第二个字母开始的子串有bb bbd bbda...
for(i=0; i<strlen(str); i++)
{
int j=i;
for(; j<strlen(str); j++)
{
int rs=isHui(str,i,j);
if(rs){
int length=j-i+1;
//printf(" length %d\n",length);
if(length > maxLength){
printf("-----------max start i %d\n",i);
maxLength=length;//记录下长度和开始位置
maxStart=i;
}
}
}
}
//打印该语句
i=maxStart;
printf("-----------\n");
//printf(DG,maxLength);
//int countChar=0;
while(i<maxLength+maxStart){
printf("%c",str[i]);
i++;
}
//printf(DG,isHui(str,4,11));
//printf(DG,charEqual('a','a'));
}
/**
判断指定字串区域是不是回文
*/
int isHui(char str[],int start,int ends)
{
//printf(DG,start);
//printf(DG,ends);
int yes=1;
int i=start;
int j=ends;
for(i=start;i<=ends;i++){
printf(CH,str[i]);
}
i=start;
while( i<=j )
{
if(isLetter(str[i])&&isLetter(str[j]))
{
// printf("str %d=%c",i,str[i]);
//printf("str %d=%c",j,str[j]);
if(!charEqual(str[i],str[j]))
//if(str[i]!=str[j])
{
yes=0;
break;
}
i++;
j--;
}
else if(isLetter(str[i])==0 &&isLetter(str[j])==1){
i++;
}else if(isLetter(str[i])==1 && isLetter(str[j])==0){
j--;
}else if(isLetter(str[i])==0 && isLetter(str[j])==0){
i++;
j--;
}
}
if(yes){
printf(" hui\n");
}else {
printf(" \n");
}
return yes;
}
int charEqual(char ch1,char ch2){
int yes=0;
//先前已经判断了ch1 ch2都是字母
//不需要当都是大写 都是小写 一个大写 一个小写 这么复杂
if(ch1==ch2){
yes=1;
}else if((ch1-ch2)==32|| (ch2-ch1)==32 ){
yes=1;
}else {}
return yes;
}
int isLetter(char ch)
{
if((ch>='A'&& ch<='Z')|| (ch>='a'&& ch<='z') )
{
return 1;
}
else
{
return 0;
}
}