题目描述
如何快速找到一行句子里最长和最短的单词,输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字符构成,单词间的间隔可能是多个空格、句号和逗号,试输出第1个最长的单词和第1个最短单词。
输入格式
一行句子。
输出格式
第1行,第一个最长的单词。
第2行,第一个最短的单词。
输入输出样例
输入样例1:
I love Hefei,I love learning programming.
输出样例1:
programming
I
【解析】
1:此题属于一个常规字符串练习题。
2:原理:遇到字母就拼接,遇到非字母就将判断之前是否读到了一个单词 t ,如果读到了单词 t ,将用 t 的长度进行打擂台,更新最大擂主和最小擂主,并存储这个单词。
考点:字符串的常规练习
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
getline(cin,s);
s+='.'; //添加一个句号,以防最后没有句号
int ls=s.size();
int maxn=0,minx=110;//擂主
string longString,shortString;//答案
string t="";//存储中间的单词
for(int i=0;i<ls;i++){
if(isalpha(s[i])){ // 判断s[i]是字母
t+=s[i];
}else{ // 空格 逗号 句号
if(t!=""){ // 说明之前读完了一个单词
if(t.size()>maxn){
maxn=t.size();
longString=t;
}
if(t.size()<minx){
minx=t.size();
shortString=t;
}
t="";//清空
}
}
}
cout<<longString<<endl<<shortString;
return 0;
}