c语言 单词替换 不知道为什么通过不了

描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
输入包括3行,
第1行是包含多个单词的字符串 s;
第2行是待替换的单词a(长度 <= 100);
第3行是a将被替换的单词b(长度 <= 100).

s, a, b 最前面和最后面都没有空格.
输出
输出只有 1 行,将s中所有单词a替换成b之后的字符串。

#include<stdio.h>
#include<string.h>
int main()
{
    char s[101],a[101],b[101];
    int i,j,l,la,lb,k,m,n;
    gets(s);
    gets(a);
    gets(b);
    l=strlen(s);
    la=strlen(a);
    lb=strlen(b);
    for(i=0;i<l;i++){
            k=i;
            for(j=0;j<la;j++,i++){
                if(s[i]!=a[j])
                    break;
            }
            if(j==la){
                if(la>=lb){
                    for(m=0;s[k]!='\0';k++){
                        if(m<lb){
                            s[k]=b[m];
                            m++;
                        }
                        else
                        s[k]=s[k+la-lb];
                    }}
                else if(la<lb){
                    for(m=l-1,n=lb-1;m+lb-la>=k;m--){
                        if(m>=k+la)
                        s[m+lb-la]=s[m];
                        else{
                            s[m+lb-la]=b[n];
                            n--;
                        }
                    }
                }
                l=strlen(s);
            }
            while(s[i]!=' '&&i<l)
            i++;
        
    }
    for(i=0;i<l;i++){
        printf("%c",s[i]);
    }
    
    return 0;
 }