课程29_07 1020 最长最短单词
题目:
题目描述:
给定由若干个单词组成的字符串,字符串的长度小于 500,单词和单词之间由空格分开,求出其中的最长最短单词
输入描述:
长度小于 500 的字符串
输出描述:
输出为 2 行,每行一个单词,第一行输出最长单词,第二行输出最短单词,若有多个相同长度的最长最短单词,则输出第一次出现的那个
样例输入:
I play the leading man who else
样例输出:
leading
I
解析:
简单的字符串处理。这道题可以和 求字符串个数 那道题一起思考一下,因为这道题也涉及到如何判断单词的分界线的问题。
思路很简单,从头到尾扫描字符串,用另外一个string变量存储单词,碰到空格了就计算这个变量的长度,然后和max和min对比,更新数据就可以了。
下面解题部分会详细讲解代码。
解题:
变量解释:
- str,类型string,输入的字符串
- maxs,类型string,记录最长的单词是什么
- mins,类型string,同上,记录最短的单词是什么
- temps,类型string,用来暂时存储单词,直到碰到空格单词结束,计算它的长度
- maxsl,类型int,记录最长的单词长度是多少
- minsl,类型int,记录最短的单词长度是多少
- tempsl,类型int,记录temps的长度。这个变量纯粹是用来优化的,这样不需要反复计算temps的长度,所以并不是必要的。
我们看到代码。首先读取字符串,做一些初始化。接下来我们看循环的开始点并不是常规的i=0,而是(str[0]==' ')?1:0
,为什么呢。我们看下面,我们判断一个单词是否结束的时候,用了str[i]==' ' && str[i-1]!=' '
,但是要注意的是,如果第一个就是空格,那我们就会访问i-1,也就是-1,这个时候就越界了。所以当第一个字符是空格的时候&#x