最大回文串问题,拜托各位了

我找很长时间了,就是找不到错误(可以编译,输出不对),拜托各位看一下,新人,没有悬赏分,感谢各位的回答

 #include<iostream>
#include<string.h>
#include<cctype>
using namespace std;
int main()
{
    char a[101], b[101];
    int c[101];

    while (cin.getline(a, 101))
    {
        int i,d, k, x,y,left, right, width , extence = 1, j;
        j = 0;//注意变量
        int len = strlen(a);
        for (i = 0; i<len; i++)//第一步,把字母转化为大写,并以#隔开,例如A#D#S#K
        {
            if (isalpha(a[i]))
            {
                if (j >= 1)  b[j++] = '#';

                c[j] = i;//整型数组C代表找到的字母在原文a中位置
                b[j++] = toupper(a[i]);
            }
        }//此时b的数组的最后一项是j-1

        for (k = 1; k <= j - 2; k++)//从第2项开始
        {
            for (width=1;; width++)
            {
                if ((b[k - width] != b[k + width]) || (k - width)<=-1 || (k + width)>=j) break;

            }
            //////////
            left = k - width + 1;
            right = k + width - 1;
            if (b[left] == '#')//保证回文两边必须是字母,而不是有#的存在
             {
                left+=1;
                right-=1;
             }
            //////////

            d=width+1;//回文字母的长度,只是字母,不包括#
            if(d>extence)//标记回文两边
            {
                extence=d;
                x=c[left];
                y=c[right];
            }
        }
        for(int s=x;s<=y;s++)
        cout<<a[s];
        cout<<endl;
     }
    return 0;
}

重新写一下吧,可以采用将按顺序切割成很多很多子字符串,再判断子字符串是否是回文,接着记录回文长度,然后就可以早到最大回文了。