求无重复字符的最长子串问题,结果一直显示0,可能改正

#include<stdio.h>
#include<string.h>
int main()
{
int length(char a[]);
int b;
char a[20];
gets(a);
b=length(a);
printf("最长字符为%d\n",b);
return 0;
}
int length(char a[])
{
int i,j,point=0,place;
char b[20];
for(i=0,j=0;i<=strlen(a)-1;i++)
{

    if( a[i]!=b[i])
    j++;
    b[i]=a[i];
    if(a[i]<65||(a[i]>90&&a[i]<97)||a[i]>122)
    if(j>point)
    {
        point=j;
        place=i-j;
    }
    j=0;
    for(i=0;i<=19;i++)
    b[i]='\0';
}
return point;

}

你的length函数逻辑有问题,修改如下:

int length(char a[])
{
    int tt = 1,i = 1;
    int maxlen = 0;
    while(1)
    {
        if(a[i] == 0)
        {
            if(maxlen < tt)
                maxlen = tt;
            break;
        }
        else
        {
            if(a[i] != a[i-1])
                tt++;
            else
            {
                if(maxlen < tt)
                    maxlen = tt;
                tt = 1;
            }
        }
        i++;
    }
    return maxlen;
}

int length(char a[])这里要么指定长度,要么指针数组

字符有长短之分的吗?

代码细碎啊。
if(a[i]<65||(a[i]>90&&a[i]<97)||a[i]>122)
&&的优先级高于||