【GESP】C++三级练习 luogu-B2120 单词的长度
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。
luogu-B2120 单词的长度
题目要求
题目描述
输入一行单词序列,相邻单词之间由 $1$ 个或多个空格间隔,请对应地计算各个单词的长度。
注意:如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。
输入格式
一行单词序列,最少 $1$ 个单词,最多 $300$ 个单词,单词之间用至少 $1$ 个空格间隔。单词序列总长度不超过 $1000$。
输出格式
依次输出对应单词的长度,之间以逗号间隔。
输入输出样例 #1
输入 #1
1
She was born in 1990-01-02 and from Beijing city.
输出 #1
1
3,3,4,2,10,3,4,7,5
题目分析
解题思路
- 首先读取一整行输入的字符串,包含单词和空格
- 遍历字符串的每个字符:
- 遇到非空格字符时,累加当前单词长度
- 遇到空格字符时,如果前面有单词(长度不为0),则输出该单词长度
- 最后需要输出最后一个单词的长度
- 注意输出格式:用逗号分隔每个长度,第一个数字前不加逗号
复杂度分析:
- 时间复杂度为 $O(n)$,其中n为输入字符串的总长度
- 空间复杂度为 $O(1)$,只需要几个变量来记录状态
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#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;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权