C语言求最长单词
Description每一行是一个英文的句子。请你找出长度最长的单词,如果长度相同的,则按序输出。Input输入有若干行,每行一句。Ouput每句中的最长单词,长度相同的...
Description
每一行是一个英文的句子。请你找出长度最长的单词,如果长度相同的,则按序输出。
Input
输入有若干行,每行一句。
Ouput
每句中的最长单词,长度相同的单词,按字典序输出,中间用空格隔开 展开
每一行是一个英文的句子。请你找出长度最长的单词,如果长度相同的,则按序输出。
Input
输入有若干行,每行一句。
Ouput
每句中的最长单词,长度相同的单词,按字典序输出,中间用空格隔开 展开
展开全部
#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是大写...所以字典序比其他的小
追问
好乱,可以发整齐的代码吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询