004:最长最短单词
总时间限制:
1000ms
内存限制:
65536kB
描述
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。试输出第1个最长的单词和第1个最短单词。
输入
一行句子。
输出
两行输出:
第1行,第一个最长的单词。
第2行,第一个最短的单词。
样例输入
I am studying Programming language C in Peking University
样例输出
Programming
I
提示
如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。
代码
#include<stdio.h>
int main(){
int max=0,min=101;//单词最大和最小长度
char a[2100],M[101],m[101];//M数组存放最长的单词 m数组存放最短的单词
gets(a);//输入一行句子
for(int i=0;a[i]!=0;i++)//循环到'\0'前一个字符结束
{
int n;
if(a[i]!=','&&a[i]!=' ')n++;//记录单词的字母数
else//遇到空格和逗号时
{
if(n<min)
{
min=n;
for(int k=0,h=i-n;k<min;h++,k++)//h为该单词的第一个字母在数组a的位置
{
m[k]=a[h];//将最短的单词存入min
m[min]='\0';//如果上一个存入的单词比此次长,则多余的部分删掉
}
}
n=0; //如果遇到间隔符,则将n归零
}
if(n>max){
max=n;
for(int k=0,h=i-n+1;k<max;h++,k++)M[k]=a[h];//h为该单词的第一个字母在数组a的位置
}
}
printf("%s\n%s",M,m);
return 0;
}