输入一个字符串,求出其中最长的回文字串。
例:she say:madam,I’…/m adam…
输出:madam,I’…/m adam
不考虑空格跟非字母元素
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int huiwenString(char*p,int start,int end){
int i=start,j=end;
char s,e;
while(i<j){
if((((p[i]<='Z')&&(p[i]>='A'))||((p[i]<='z')&&(p[i]>='a')))&&(((p[j]<='Z')&&(p[j]>='A'))||((p[j]<='z')&&(p[j]>='a')))){
s=(p[i]<='Z')&&(p[i]>='A')?p[i]+32:p[i];
e=(p[j]<='Z')&&(p[i]>='A')?p[j]+32:p[j];
if(s!=e){
return 0;
}
i++;j--;
}else if(((p[i]<='Z')&&(p[i]>='A'))||((p[i]<='z')&&(p[i]>='a')))j--;
else if((((p[j]<='Z')&&(p[j]>='A'))||((p[j]<='z')&&(p[j]>='a'))))i++;
else{i++;j--;}
}
return 1;
}
int main(void){
char *str=NULL;
char c;
int k=0,len,i=0,j=0,flag=0,count=0;
while(scanf("%c",&c)!=EOF){
count++;
str=(char*)realloc(str,count*sizeof(char));
if(c!='\n'){
str[count-1]=c;
}
}
str[count-1]='\0';
len=strlen(str);
flag=0;
for(k=len-1;k>=1;k--){
for(i=0;i<len-k;i++){
j=i+k;
if(huiwenString(str,i,j)==1){
while(str[i]<'A'||(('Z'<=str[i])&&(str[i]<='a'))||str[i]>='z'){
i++;
}
while(str[j]<'A'||(('Z'<=str[j])&&(str[j]<='a'))||str[j]>='z'){
j--;
}
for(k=i;k<=j;k++){
printf("%c",str[k]);
}
flag=1;break;
}
}
if(flag==1)break;
}
return 0;
}