高手帮我看看这段C程序

来源:百度知道 编辑:UC知道 时间:2024/05/12 00:02:49
程序作用:找出一段字符中最长的单词
运行的时候刚开始运行可以,多运行几次就出问题了,不知道怎么回事。我用的是TC2.0

void lword(char str1[],char str2[])
{
int i=0,j=0,k=0;
char str[100];
while (str1[i]!='\0' && str1[i]!=' ')
{
str2[j++]=str1[i++];
}
str2[j]='\0'; i++;
do
{
j=0;
while(str1[i]!='\0' && str1[i]!=' ')
{
str[j]=str1[i];i++;j++;
}
str[j]='\0';i++;
if (strlen(str)>strlen(str2))
strcpy(str2,str);
}while(str1[i]!='\0');
}
main()
{
char str1[100],str2[100];
gets(str1);
lword(str1,str2);
puts(str2);
}
暂时不考虑多个空格的情况.运行前几次都是正确的,后边再运行的时候,居然输出结果还是上次运行的结果!

#include "stdafx.h"
#include <conio.h>
#include <string.h>
void lword(char str1[],char str2[])
{
int i=0,j=0,k=0;
char str[100];
while (str1[i]!='\0' && str1[i]!=' ')
{
str2[j++]=str1[i++];
}
str2[j]='\0'; i++; /*
这里出现问题了,当str[i]=='\0'时退出了这个循环,
但是i++,使得str[i]越过了字符串界,下面的问题就变得不可猜测了。
*/
do
{
j=0;
while(str1[i]!='\0' && str1[i]!=' ')
{
str[j]=str1[i];i++;j++;
}
str[j]='\0';i++;
if (strlen(str)>strlen(str2))
strcpy(str2,str);
}while(str1[i]!='\0');
}
/*我写了一个*/
void lword1(char *str1, char *str2)
{
char ch,*str;
int max,n;
max=0; n=0; /*max=最大单词长度,n=当前单词长度统计*/
str=str1; /*str=当前单词词头*/

while(ch=*str1++) {
if (ch!=' '&&ch!='\t