忽略字符串中的大小写和标点
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAXN 5000+10
//测试数据:Confuciuss say:Madam,I'm Adam
//忽略大小写
char buf[MAXN];//存储源字符串
char s[MAXN];//存储去除标点并改为大写后的字符串,方便判断回文与否
int p[MAXN];//存储每个字母在源字符串中的位置
int main()
{
int n, m = 0, max = 0;
int i, j, x, y;
fgets(buf, sizeof(buf), stdin);
n = strlen(buf);
for (i = 0; i < n; i++)
{
if(isalpha(buf[i]))
{
p[m] = i;
s[m++] = toupper(buf[i]);//全部转换为大写
}
}
for (i = 0; i < m; i++)
{
for (j = 0; i - j >= 0 && i + j <= m; j++)
{
if (s[i - j] != s[i + j])
{
break;
}
if (max < j * 2 + 1)
{
max = j * 2 + 1;
x = p[i - j];
y = p[i + j];
}
}
for (j = 0; i - j >= 0 && i + j + 1 <= m; j++)
{
if (s[i - j] != s[i + j + 1])
{
break;
}
if (max < j * 2 + 2)
{
max = j * 2 + 2;
x = p[i - j];
y = p[i + j + 1];
}
}
}
for (i = x; i <= y; i++)//原样输出回文
{
printf("%c", buf[i]);
}
return 0;
}