忽略字符串中的大小写、标点符号
#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, k, x, y;
int ok;
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 = i; j < m; j++)//回文起始位置
{
ok = 1;
for( k = i; k <= j; k++)//回文结束位置
{
if (s[k] != s[i+j-k])
{
ok = 0;
}
}
if (ok && j-i+1 > max)
{
max = j-i+1;
x = p[i];
y = p[j];
}
}
}
for (i = x; i <= y; i++)//原样输出回文
{
printf("%c", buf[i]);
}
return 0;
}