luogu-B2120 单词的长度

luogu-B2120 单词的长度

GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。

luogu-B2120 单词的长度

题目要求

题目描述

输入一行单词序列,相邻单词之间由 11 个或多个空格间隔,请对应地计算各个单词的长度。

注意:如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。

输入格式

一行单词序列,最少 11 个单词,最多 300300 个单词,单词之间用至少 11 个空格间隔。单词序列总长度不超过 10001000

输出格式

依次输出对应单词的长度,之间以逗号间隔。

输入输出样例 #1

输入 #1

She was born in 1990-01-02  and  from Beijing city.

输出 #1

3,3,4,2,10,3,4,7,5

题目分析

解题思路

  1. 首先读取一整行输入的字符串,包含单词和空格
  2. 遍历字符串的每个字符:
    • 遇到非空格字符时,累加当前单词长度
    • 遇到空格字符时,如果前面有单词(长度不为0),则输出该单词长度
  3. 最后需要输出最后一个单词的长度
  4. 注意输出格式:用逗号分隔每个长度,第一个数字前不加逗号

复杂度分析:

  • 时间复杂度为 O(n)O(n),其中n为输入字符串的总长度
  • 空间复杂度为 O(1)O(1),只需要几个变量来记录状态

{% include custom/custom-post-content-inner.html %}


示例代码

#include <iostream>
#include <string>

int main() {
    // 定义字符串变量用于存储输入的单词序列
    std::string str;
    // 使用getline读取一整行输入,包含空格
    std::getline(std::cin, str);
    // 获取字符串长度
    int length = str.length();
    // flag用于标记是否是第一个输出的数字
    bool flag = true;
    // count用于统计当前单词的长度
    int count = 0;
    // 遍历字符串的每个字符
    for (int i = 0; i < length; i++) {
        // 如果当前字符是空格
        if (str[i] == ' ') {
            // 如果count为0说明是连续空格,直接跳过
            if (count == 0) {
                continue;
            } else {
                // 如果是第一个数字,直接输出
                if (flag) {
                    std::cout << count;
                    flag = false;
                } else {
                    // 如果不是第一个数字,需要先输出逗号
                    std::cout << "," << count;
                }
                // 重置单词长度计数器
                count = 0;
            }

        } else {
            // 如果不是空格,单词长度加1
            count++;
        }
    }
    // 输出最后一个单词的长度
    std::cout << "," << count;
    return 0;
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on