2022年包河区青少年信息学科普日真题-找单词游戏(words)

题目描述
如何快速找到一行句子里最长和最短的单词,输入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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ahstunwy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值