2481: 2020年06月2级T2:最长最短单词

题目描述

 2020年06月2级第二题题目:最长最短单词  

输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。 试输出第1个最长的单词和第1个最短单词。

输入

一行句子。

输出

两行输出: 第1行,第一个最长的单词。 第2行,第一个最短的单词。

样例输入

复制

I am studying Programming language C in Peking University
样例输出

复制

Programming
I
提示

如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。

#include <bits/stdc++.h>
using namespace std;

#define MAX_W 200
#define MAX_L 100

int main() {
    // 定义输入句子的最大长度
    char s[MAX_W * (MAX_L + 1)];
    cin.getline(s, sizeof(s));

    // 定义二维数组存储单词
    char w[MAX_W][MAX_L + 1];
    int wc = 0;
    int len = strlen(s);
    int st = 0;

    // 分割单词并存储到二维数组中
    for (int i = 0; i <= len; ++i) {
        if (s[i] == ' ' || s[i] == ',' || s[i] == '\0') {
            if (st < i) {
                int wl = i - st;
                strncpy(w[wc], &s[st], wl);
                w[wc][wl] = '\0';
                wc++;
            }
            st = i + 1;
        }
    }

    // 初始化最长和最短单词为第一个单词
    char* lw = w[0];
    char* sw = w[0];

    // 查找最长和最短单词
    for (int i = 1; i < wc; ++i) {
        if (strlen(w[i]) > strlen(lw)) {
            lw = w[i];
        }
        if (strlen(w[i]) < strlen(sw)) {
            sw = w[i];
        }
    }

    // 输出结果
    cout << lw << endl;
    cout << sw << endl;

    return 0;
}


代码说明: 1. 输入处理:使用cin.getline读取整行输入。 2. 分割单词:  使用一个二维字符数组w来存储每个单词。  遍历输入字符串s,找到每个单词的起始和结束位置,并将其复制到w数组中。   3. 查找最长和最短单词:  初始化lw(最长单词)和sw(最短单词)为第一个单词。  使用for循环遍历所有单词,更新lw和sw。   4. 输出结果:分别输出第一个最长和第一个最短的单词。  这个程序严格按照题目要求,使用二维数组来存储单词,并通过for循环来处理和比较单词长度。变量名尽量简化,并添加了必要的注释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值