C语言求最长单词

Description每一行是一个英文的句子。请你找出长度最长的单词,如果长度相同的,则按序输出。Input输入有若干行,每行一句。Ouput每句中的最长单词,长度相同的... Description

每一行是一个英文的句子。请你找出长度最长的单词,如果长度相同的,则按序输出。

Input

输入有若干行,每行一句。
Ouput

每句中的最长单词,长度相同的单词,按字典序输出,中间用空格隔开
展开
 我来答
袁世平1
2015-12-21 · TA获得超过536个赞
知道小有建树答主
回答量:459
采纳率:0%
帮助的人:391万
展开全部
#include<cstdio>
#include<cstring>

using namespace std;

const int maxn=100; //这个表示单词可能的最大个数
const int maxl=100; //这个表示单词可能的最长长度,需要根据题目要求确定

int n,maxlen;
int len[maxn];
char ch[maxn][maxl];

int max(int a,int b){
return a>b?a:b;
}

int main(){
int k=0;

while(~scanf("%c",&ch[n][k])){ //每次输入一个字符,n表示当前是第几个单词,k表示是这个单词的第几个字母
if(ch[n][k]!=' ' && ch[n][k]!='\n'){ //不是空格或空行说明还没有读完,k++,接着读下一个
k++;continue;
}
len[n]=k-1; //计算这个单词的长度
maxlen=max(maxlen,len[n]); //更新最长的单词长度
if(ch[n][k]==' ') k=0,n++; //如果读到空格,说明这个单词读完了
else{ //如果读到空行,说明这组数据读完了,开始输出这组数据的答案
for(int i=0;i<=n;i++)
if(len[i]==maxlen) //如果长度等于最长的单词长度,这个单词就是最长单词
printf("%s",ch[i]); //输出即可
putchar('\n');
memset(ch,0,sizeof(ch)); //将原来的数组清空
n=0;maxlen=0;k=0;
}
}

return 0;
}

我自己测了一组输入数据,答案应该没什么问题了:

Hello sir are you satisfied with my answer ?
Yes I feel thankful of your answer .
How does it feel ?
It feels very good !

输出:

satisfied  
thankful  
does feel  
feels

 


等等,我才发现是按字典序输出...我这是按输入顺序输出的....

#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

const int maxn=100; //这个表示单词可能的最大个数
const int maxl=100; //这个表示单词可能的最长长度,需要根据题目要求确定

int n,maxlen;

struct Word{
int len;
char ch[maxl];
void clean(){
memset(ch,0,sizeof(ch));
}
}word[maxn];

int max(int a,int b){
return a>b?a:b;
}

bool cmp(const Word &a,const Word &b){//比较两个单词的函数
return strcmp(a.ch,b.ch)<0;
}

int main(){

int k=0;

while(~scanf("%c",&word[n].ch[k])){ //每次输入一个字符,n表示当前是第几个单词,k表示是这个单词的第几个字母
if(word[n].ch[k]!=' ' && word[n].ch[k]!='\n'){ //不是空格或空行说明还没有读完,k++,接着读下一个
k++;continue;
}
word[n].len=k-1; //计算这个单词的长度
maxlen=max(maxlen,word[n].len); //更新最长的单词长度
if(word[n].ch[k]==' ') k=0,n++; //如果读到空格,说明这个单词读完了
else{ //如果读到空行,说明这组数据读完了,开始输出这组数据的答案
sort(word,word+n+1,cmp); //将所有单词按照字典序排序
for(int i=0;i<=n;i++)
if(word[i].len==maxlen) //如果长度等于最长的单词长度,这个单词就是最长单词
printf("%s",word[i].ch); //输出即可
putchar('\n');
for(int i=0;i<=n;i++)
word[i].clean(); //将原来的数组清空
n=0;maxlen=0;k=0;
}
}

return 0;
}

上面这个是修改稿。

测试数据:

Hello sir are you satisfied with my answer ?
Yes I feel thankful of your answer .
How does it feel ?
It feels very good !
What feel it does ?

输出结果:

satisfied  
thankful  
does feel  
feels  
What does feel

最后一个What先输出不是错误哦...

因为W是大写...所以字典序比其他的小

追问
好乱,可以发整齐的代码吗?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式