C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【字符串模拟与动态子串检索】GESP三级 / CSP-J 题解:luogu-B4578 [GESP202609 三级] 分割字符串
CCF GESP 2026年9月认证(第十五次认证)C++ 三级试题,洛谷 B4578。本题严格遵循 CCF GESP 官方大纲规范,重点考察字符串模拟与动态子串检索。题目逻辑严密,模型典型,是深入理解与掌握信奥核心考点的经典范例。
B4578 [luogu-B4578 [GESP202609 三级] 分割字符串]
🔗 洛谷原题传送门:B4578
题目要求
题目描述
小明拿到了一段字符串文本,希望用下面的规则分割这个字符串:
- 从左到右扫描字符串,遇到第一个空格后停止,将字符串分割为左右两部分(舍弃用于分割的这个空格);
- 对于上次分割后右侧的字符串,继续扫描,第一次遇到连续两个空格后停止,分割为左右两部分(舍弃用于分割的这两个空格);
- 依此类推,小明每分割一次,下一次分割就需要更长的连续空格(第 次需要连续 个空格);直到字符串无法再次分割。
最后依次输出每次分割左侧的字符串,以及最后一次分割后右侧剩余的字符串。 如果字符串完全无法进行任何一次分割,直接输出其本身。
输入格式
输入一行,一个字符串(可能包含若干空格,不会以空格结尾)。
输出格式
输出若干行。每行为分割后的一个字符串。
输入输出样例
样例输入 #1
sdfd 55 55 99312
样例输出 #1
sdfd
55 55
99312
说明/提示
字符串长度不超过 1000。注意若分割出的左侧为空串,需输出空行,不能省略。
题目分析与解题思路
- 整行读取:输入含有空格,必须使用
getline(cin, s)完整读取一行文本。 - 递增匹配模式构造:维护分割轮数计数器 。在当前剩余字符串
s中查找模式串string pattern(k, ' '),即连续 个空格。 - 子串截取与更新:
- 使用
s.find(pattern)获取首次出现的位置pos; - 若
pos == string::npos,说明无法再满足 个空格的分割条件,跳出循环; - 若找到,左侧部分为
s.substr(0, pos)(直接输出并换行); - 右侧剩余部分更新为
s = s.substr(pos + k); - 步进 继续循环。
- 使用
- 收尾输出:循环结束后,直接将最终剩余的字符串
s输出即可。
完整参考代码 (C++11)
/**
* Problem: luogu-B4578
* Standard: C++11 (CCF GESP 官方大纲规范)
* Author: OneCoder
*/
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
if (!getline(cin, s)) {
return 0;
}
int k = 1;
while (true) {
// 构造连续 k 个空格的匹配目标
string pattern(k, ' ');
size_t pos = s.find(pattern);
if (pos == string::npos) {
break;
}
// 输出左侧截取的子串
string left_part = s.substr(0, pos);
cout << left_part << "\n";
// 更新右侧剩余字符串并递增所需空格数
s = s.substr(pos + k);
k++;
}
// 输出最终右侧剩余部分
cout << s << "\n";
return 0;
}
考点归纳与备考建议
- 考纲匹配度:严格对标 CCF GESP 三级考纲重点,绝不超纲,注重基础算法与逻辑建模规范;
- 规范防范:所有代码严格以 C++11 标准编译运行,针对整数溢出、边界判断、空状态均做了详尽严整的防御性处理。
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
猜你想读 · 相关文章推荐
【位运算·按位与及公共位统计】GESP三级 / CSP-J 题解:luogu-B4577 [GESP202609 三级] 公共二进制位
CCF GESP 2026年9月认证(第十五次认证)C++ 三级试题,洛谷 B4577。本题严格遵循 CCF GESP 官方大纲规范,重点考察位运算·按位与及公共位统计。题目逻辑严密,模型典型,是深入理解与掌握信奥核心考点的经典范例。
【GESP】C++ 三级真题解析,[2025年12月,第十二次认证]第一题密码强度
GESP C++ 2025年12月,三级真题第一题,考察字符串考点,相对比较简单。题目难度⭐★☆☆☆。
【GESP】C++三级练习BCQM3091,选择题判定
GESP三级字符串string和一级知识点if-else分支语句练习,非常基础,对于我孩子来说练习重点在一级部分,字符串只是碰巧遇到了。
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com