在字符串中选出最长单词的源程序问题

#include<stdio.h>
#include<windows.h>
#include<conio.h>
void main()
{
char string[200],a[50],b[50],*p;
int i=0,max=0;
system("CLS");
printf("Please input a string:\n");
gets(string);
p=string;
while(*p!='\0') //当不位于终止符时
{
if(*p!=' ') //当字符不为空格时
{
b[i]='\0';
b[i]=*p;
i++;
}
else if(max<i) //当字符为空格,且新产生的字符长度大于原长度时
{
a[i]='\0';
a[i]=b[i];
max=i;
i=0;
}
else
i=0;
p++;
}
if(max<i)
{
a[i]='\0';
a[i]=b[i];
max=i;
i=0;
}
printf("%d\n",max);
puts(a);
getche();
}

这是我编的源代码,结果运行时出现这个问题,请大家帮我解答一下,或者帮我更改一下。

问题结果:我本意是选出最长的单词,但结果却将所有的都显示了出来,而且前面还一堆一样的汉字,这是怎么回事?
这是图片
最新回答
祭岛离梦

2024-10-22 08:09:10

Please input a string:
i am a good guy
4
good

#include<stdio.h>
#include<windows.h>
#include<conio.h>
void main()
{
char string[200],a[50],b[50],*p;
int i=0,max=0;
system("CLS");
printf("Please input a string:\n");
gets(string);
p=string;
while(*p!='\0') //当不位于终止符时
{
if(*p!=' ') //当字符不为空格时
{
b[i++]=*p;
}else
{
if(max<i) //当字符为空格,且新产生的字符长度大于原长度时
{
max=i;
b[i]='\0';
strcpy(a,b);
}
i=0;
}
p++;
}
printf("%d\n",max);
puts(a);
getche();
}
追问
兄弟,你这回答好快,但是不对啊,我刚才输入 i am a chinese时,给出来的竟然是 am 最长数它显示的是2,无语,呵呵,不过我先看看,或许是里面那一步有些小错误。你再帮我改改,我给追你为满意答案    还有,我终于知道你为什么算的是对的了,因为你根本就没在编译器上运算过啊,真是服了你了!!!!!!
追答
我运行了的 要不然前面的运行结果 你认为我是自己编的?

请不要这么诽谤别人 尤其是在无偿帮助你的人

你可以用我的输入看看 如果跟我结果不一样你在来先疑问 不要随意出口伤人
追问
额,对不起,我刚才纯粹是开玩笑的,没想到你生气了,真是对不起   我刚才运行了一下,确实有时候是正确的,我知道你肯定是用心编的,只是有点问题,刚才说错了话,你别介意
追答
Please input a string:
i am a chinese
7
chinese

//现在改好了
#include
#include
#include
void main()
{
char string[200],a[50],b[50],*p;
int i=0,j,max=0;
system("CLS");
printf("Please input a string:\n");
gets(string);
p=string;
for (j=0;j<=strlen(string);j++)
{
if(*p!=' ' && *p!='\0') //当字符不为空格时
{
b[i++]=*p;
}else
{
b[i]='\0';
if(max<i) //当字符为空格,且新产生的字符长度大于原长度时
{
max=i;
strcpy(a,b);
}
i=0;
if (*p=='\0')
{
break;
}
}
p++;
}
printf("%d\n",max);
puts(a);
getche();
}
追问
嗯,对的,谢谢你没生气,还来回答。再问一下,如果输入的字符串中有两个长度相同的单词,要使两个都能狗输出来,怎么办(只简单的高诉算法思想就够了,不用额外编程)?