最长最短单词

21:最长最短单词
    总时间限制:1000ms  内存限制:65536kB
描述
    输入1行句子(不多于200个单词,每个单词长度不超过100),
    只包含字母、空格和逗号。单词由至少一个连续的字母构成,
    空格和逗号都是单词间的间隔。
    试输出第1个最长的单词和第1个最短单词。
输入
    一行句子。
输出
    两行输出:
    第1行,第一个最长的单词。
    第2行,第一个最短的单词。
样例输入
    I am studying Programming language C in Peking University
样例输出
    Programming
    I
提示
    如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。

分析:

这个题目思路是这样:先用gets函数输入整行字符串a,然后扫描a串分割出各个单词,依次比较新分割的单词的长度是否比已经发现的单词中最长、最短单词还要长或短,若是有需要在更新一经发现的最长、最短单词并更新最长、最短单词的长度。

这里关键是扫描、分割单词。由于空格和逗号都是单词的分隔符号,所以可以把他们两种符号一起处理。扫描分割的过程需要用标志性变量f。f=0表示当前遇到的分隔符(空格或逗号)是新单词之前的分隔符; f=1表示当前遇到的分隔符前面有一个刚刚扫描形成的单词,也就是已经扫描分割出一个单词,需要对该单词做处理(求长度newLen,用newLen和max、min比较)。注意:在处理完一个单词后需要把f重新设为0.

还要注意:输入的串的开头、结尾可能有分隔符,也可能没有分隔符。所以末尾单词不一定被拿来跟max和min作比较。需要在循环后单独处理。

代码如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main(int argc, char *argv[])
 4 {
 5     char a[20005],b[105],maxT[105]="",minT[105]="";
 6     int i,j;
 7     int max=-1,min=105,newLen;//表示当前已经发现的最长、最短单词的长度
 8     int f;
 9
10     freopen("21.in","r",stdin);
11     gets(a);
12     i=0;
13     j=0;
14     f=0; // f=0表示当前遇到的分隔符(空格或逗号)是新单词之前的分隔符
15     while(a[i]!=‘\0‘)//扫描a串生成一个新的单词,然后测其长度,再与max、min对比
16     {
17         if(a[i]==‘ ‘||a[i]==‘,‘)
18         {
19             if(f==1)// f=1表示当前遇到的分隔符前面有一个刚刚扫描形成的单词
20             {
21                 b[j]=‘\0‘;
22                 newLen=strlen(b);
23                 if(newLen>max) { max=newLen; strcpy(maxT,b); }
24                 if(newLen<min) { min=newLen; strcpy(minT,b); }
25                 f=0;
26                 j=0;
27             }
28         }
29         else
30         {
31             b[j]=a[i];
32             j++;
33             f=1;//开始或是正在构造一个单词
34         }
35         i++;
36     }
37
38     //处理末尾单词
39     b[j]=‘\0‘;
40     newLen=strlen(b);
41     if(newLen>max) { max=newLen; strcpy(maxT,b); }
42     if(newLen<min) { min=newLen; strcpy(minT,b); }
43
44     printf("%s\n%s\n",maxT,minT);
45     return 0;
46 }

输入案例:

   ,,,,,,,,,,,,,,,,,,,,,, I am studying    Programming,,,,,, languagefff C in Peking Universityddddddd

输出案例:

Universityddddddd
I
时间: 2024-02-12 21:44:53

最长最短单词的相关文章

AC日记——最长最短单词 openjudge 1.7 25

25:最长最短单词 总时间限制:  1000ms 内存限制:  65536kB 描述 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母.空格和逗号.单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔. 试输出第1个最长的单词和第1个最短单词. 输入 一行句子. 输出 两行输出:第1行,第一个最长的单词.第2行,第一个最短的单词. 样例输入 I am studying Programming language C in Peking University 样例输出 P

统计语句中的最长最短单词

已知 string sentence="We were her pride of 10 she named us: Benjamin, Phoenix, the Pordigal and perspicacious pacific Suzanne.";编写程序,计算sentence中有多少个单次,并指出其中最长和最短的单词,如果有多个,则将它们全部输出 使用find_first_of 和find_first_not_of,寻找到单词的起始位置: 使用vector存放最长和最短单词:通过

最长最短单词c++

本人只是一个菜鸡.这还是要感谢一个大佬的帮助才能够写出来.分享给大家. #include<bits/stdc++.h>using namespace std;int main(){char a[20000];char wlong[200];char wshort[200],word[200];int numlong=0,numshort=100;int i,n,l,k,cl; l=0;k=0;cin.getline(a,20000);n=strlen(a); for(i=0;i<=n;i

【C】字符串的输入,求输入字符串中最长的单词

首先,基本目标很简单,就是利用C语言:编写一个函数,输入一行字符,将此行字符中的最长的单词输出. 代码如下: #include<stdio.h> void input(char s[]){ int i=0; for(int c;(c=getchar())!='\n';i++){ s[i]=c; } s[i]='\0';//读取完成,记得对这个字符数组封口 } char* findmax(char s[]){ int max=0,word_length=0,p=0,i=0;//这个p是用来记录最

寻找最长的单词算法

给定一句话,查询出里面的最长单词的长度. 返回提供的句子中最长的单词的长度. 返回值应该是一个数字. 以split()分割句子里的每个单词保存的数组里,然后比较最长的单词. function findLongestWord(str) { var s=str.split(" "); var len=0; for(i=0;i<s.length;i++){ if(s[i].length>len){ len=s[i].length; } } return len; } findLo

[LeetCode] 244. Shortest Word Distance II 最短单词距离 II

This is a follow up of Shortest Word Distance. The only difference is now you are given the list of words and your method will be called repeatedly many times with different parameters. How would you optimize it? Design a class which receives a list

[LeetCode] 243. Shortest Word Distance 最短单词距离

Given a list of words and two words word1 and word2, return the shortest distance between these two words in the list. For example,Assume that words = ["practice", "makes", "perfect", "coding", "makes"]. G

搜索(BFS)---最短单词路径

最短单词路径 127. Word Ladder (Medium) Input: beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"] Output: 5 Explanation: As one shortest transformat

来自百度贴吧的练习题 :求最长单词的长度和最短单词的长度。

In the function ex5 write code that will input a line of text, split it into words, and display these words one per line, and also print the length of the longest and shortest words. You should regard any sequence of consecutive non-space characters