2. 用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。C语言高手快出现

2. 用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。(1)把两个函数放在同一个程序文件中。
(2) 将两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。
提示:
1. 寻找最长单词的起始位置函数:
int longest(charstring[])
//n为字符串的长度,len为每个单词的长度
//length为最长单词的长度,point为最长单词的起始位置
//函数返回最长单词的起始位置
{
int len=0,i,n,length=0,flag=,place=0,point;
n=strlen(string);
for(i=0;i<=n;i++)
ifstring[i]为英文字母
if(flag) {point=i;flag=0;}
else len++;
else
{
flag=1;
if(len>=length)
{
length=len;
place=point;
len=0;
}
}
return place;
}
在main函数中输入一行字符,然后调用上面函数取得最长字符的开始位置,从该位置开始输入数组元素,直到输出的数组元素不是英文字母时止。

把两个函数放在同一个程序文件中:

//函数返回最长单词的起始位置
int longest(char string[])
{
//n为字符串的长度,len为每个单词的长度
//length为最长单词的长度,point为最长单词的起始位置
int len,i,length=0,flag=0,place=0,point;
for(i=0;;++i)
{
if(string[i] >= 'a' && string[i] <= 'z' || string[i] >= 'A' && string[i] <= 'Z')
{
if(flag)
{
len=1;
point=i;
flag=0;
}
else
{
++len;
}
}
else
{
flag=1;
if(len>=length)
{
length=len;
place=point;
}

len=0;
}

if(string[i] == 0)
break;
}

return place;
}

int main(int argc, char* argv[])
{
longest(" fjfds  fjdsg fjsajg   fdhasg843 vhjgg gjagjgjfah f f   ");

return 0;
}




将两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行:


将longest函数剪切后存放在另一个.c文件中,在int main前面加一行声明:

extern int longest(char string[]);

追问

八处错误啊亲

追答

哥们,俺用VC6编译通过了才贴上来的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-14
我看在abc()中楼主的思想是:把单词先一个个找出来存到d[50][50]中,然后再比较长短。
错误比较多,就不一一指出了,也难怪,楼主是新手。
我改了一下,贴在下面,请楼主对照自己的看吧。(我这个测试通过)

#include
#include
void abc(char c[],char e[50])
{
int i,j,k,x;
char d[50][50]={0};
for(i=0,j=0;;) //初始化,并开始无限循环,由内部决定何时跳出
{
k=0; //开始查找一个新单词
while(c[i]==' ') i++; //忽略开头的空格
while(c[i]!=' ' && c[i]!='\n') //记录这个单词直到遇到空格或回车
{
d[j][k]=c[i];
k++;
i++;
}
if(c[i]=='\n') break; //如果是回车,则所有单词都找完了,跳出循环
j++; //准备查下一个单词
}
strcpy(e,d[0]);
for(x=1;x<=j;x++)
if(strlen(e)<strlen(d[x])) strcpy(e,d[x]);
}
void main()
{
char a[200],b[50];;
printf("请输入一行字符串:");
for(int i=0;;i++){
a[i]=getchar();if(a[i]=='\n')break;}
abc(a,b);
puts(b);
}
相似回答