2. 用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。C语言高手快出现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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编译通过了才贴上来的。
参考技术A 我看在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);
c语言输入一行字符将此字符串中最长的单词输出
这函数 我怎么没见过 是c语言吗
#include <iostream>void main()
int word(char c);
int longest(char str[]);
int i;
char str[80];
printf("输入一行字符串\\n\\n");
gets(str);
printf("\\n\\n最长的单词为:\\n\\n");
for(i=longest(str);word(str[i]);i++)
printf("%c",str[i]);
printf("\\n");
int word(char c)
if((c>=\'a\'&&c<=\'z\')||(c>=\'A\'&&c<=\'Z\')) return 1;
else return 0;
int longest(char str[])【这个函数几乎完全看不懂 望逐句详细解释其逻辑】
int i,flag=1,len=0,point,max_len=0,max_point;
for(i=0;i<=strlen(str);i++)//解析每个字符
if(word(str[i])) //是英文字母的话
if(flag==1) //成立的话说明这个英文字母是单词的第一个
point=i; //单词第一个找到后改变标志
flag=0;
else len++; //开始对这个单词长度进行累加
else //非英文字母的话
flag=1; //等待第一个英文字母的出现,所以flag=1(要是下一个是英文字母的话就能执行上面的if)
if(len>max_len)//之前累加的单词长度是否比上一个单词更长(第一次的话max_len初始化为0,len必大于max_len)
max_len=len;//将单词长度保存下来
max_point=point;//将最长单词的第一个英文字母在字符串中的位置保存下来
len=0;
return (max_point);
参考技术A #include <string>
#include <iostream>
using namespace std;
int main()
string s, t;
while (cin >> s)
if (s.size() > t.size()) t = s;
cout << t << endl;
return 0;
以上是关于2. 用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。C语言高手快出现的主要内容,如果未能解决你的问题,请参考以下文章