#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;
}
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;
}