整个代码看了好几遍了,不知道哪里有问题

img

#include
#include
void FindWord(char *a){
int i=0,j,k=0,max,pre,w,z,x,r=0;
char b[20][30]={'\0'};
while(a[i]!='\0')
{ int m=0;
while((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z'))
{
b[k][m]=a[i];
i++;
m++;
}
b[k][m]='\0';
if(a[i]=='\0')
{
break;
}
k++;
b[k][0]=a[i];
i++;
k++;
}
max=strlen(b[0]);
for(j=0;j<=k;j++)
{
if(strlen(b[j])>max){
max=strlen(b[j]);
pre=j;
}
}
char tmp[20]={'\0'};
strcpy(tmp,b[j]);
for(w=j+1;w<=k;w++)
{
strcpy(b[w-2],b[w]);

 }
 strcpy(b[k],tmp);
 for(z=0;z<=k;z++){
     for(x=0;x'\0';

}

int main(){
char s[]="You are a student too";
FindWord(s);
puts(s);

return 0;

}

img


strcpy(tmp,b[j]);
for(w=j+1;w<=k;w++)

改成

strcpy(tmp,b[pre]);
for(w=pre+1;w<=k;w++)

bug不是看出来的,是调试出来的,你的代码还有一些问题,例如pre没有赋初始值,这就导致如果最长的单词是第一个的话pre就是一个随机数。

修改了一些小的细节方面,如下:


#include<stdio.h>
#include<string.h>
void FindWord(char *a){
    
    int i=0,j,k=0,max,pre,w,z,x,r=0;
    char b[20][30]={'\0'};
    
    while(a[i]!='\0')
    { 
        int m=0;
        while((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z'))
        {
            b[k][m]=a[i];
            i++;
            m++;
        }
        b[k][m]='\0';
    //    printf("in while,b[%d]=%s\n",k,b[k]);
        if(a[i]=='\0')
        {
            break;
        }
        
        k++;
        i++; 
        
//        b[k][0]=a[i];
//        i++;
//        k++;
    }
//    printf("k=%d\n",k);
    
    max=strlen(b[0]);
    for(j=0;j<=k;j++)
    {
    //    printf("b[%d]=%s\n",j,b[j]);
        if(strlen(b[j])>max){
            max=strlen(b[j]);
            pre=j;
        }
    }
    
    char tmp[20]={'\0'};
    
    strcpy(tmp,b[pre]);
//    printf("tmp=%s\n",tmp);    
    
    for(w=pre;w<k;w++)
    {
        strcpy(b[w],b[w+1]);
    
     }     
     strcpy(b[k],tmp);
     
//     printf("after copy :\n");
//     for(j=0;j<=k;j++)
//    {
//        printf("b[%d]=%s\n",j,b[j]);
//        
//    }
    
     for(z=0;z<=k;z++){
         for(x=0;x<strlen(b[z]);x++)
         {
             a[r]=b[z][x];
             r++;
         }
         a[r] = ' ';
         r++;
     }
     a[r]='\0';
}

int main(){
    char s[]="You are a student too";
//    char s[]="You are a goodmanfly student too ";
    FindWord(s);
    puts(s);
    
    return 0;
}

img