将一串英文字附中多余的空格删除还有找到最长的单词的长度这样做怎么错了呀

1.
#include<stdio.h>
#include<stdlib.h>

int main(){
char str[20],str2[20];
int i,flag=0,j;
gets(str);
for(i=0;i<20;i++){
if(str[i]==' '){
if(flag==1){
str2[j]=str[i];
j++;}
flag=0;

   }
   else
            str2[i]=str[i];
            j++;
}
for (i=0;i<20;i++){
    printf("%c",str2[i]);
}
return 0;

}
2.
#include<stdio.h>
#include<stdlib.h>

int main(){
int length=0,t=0,i;
char str[20];
gets(str);
for(i=0;i<20;i++){
if(str[i]==' ')
length=0;
else
length++;
if(length>t)
t=length;
}
printf("%d",t);
return 0;
}

第一个

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
    char str[20],str2[20];
    int i,flag=0,j;
    gets(str);
    for(i=0; i<20; i++)
    {
        if(str[i]!=' ')
        {
                str2[j]=str[i];
                j++;
            
        }
    }
    for (i=0; i<strlen(str2); i++)
    {
        printf("%c",str2[i]);
    }
    return 0;
}

第二个

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int length=0,t=0,i;
    char str[20];
    gets(str);
    for(i=0; i<strlen(str); i++)
    {
        if(str[i]==' ')
            length=0;
        else
            length++;
        if(length>t)
            t=length;
    }
    printf("%d",t);
    return 0;
}

img

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
    char str[250];
    int i,flag=0,k,j;
    gets(str);
    for(k=0; k<250; k++)
        for(i=0; i<250; i++)
        {
            if(str[i]==' '&&str[i+1]==' ')
            {
                for(j=i+1; j<250; j++)
                {
                    str[j]=str[j+1];
                }

            }
        }
    for (i=0; i<strlen(str); i++)
    {
        printf("%c",str[i]);
    }
    return 0;
}