洛谷 B4578:[GESP202609 三级] 分割字符串 ← 字符串
【题目来源】
【题目描述】
小明拿到了一段字符串文本,小明希望用下面的规则分割这个字符串:
1. 小明从左到右扫描字符串,遇到第一个空格后停止,并将字符串分割为左右两个部分(舍弃用于分割的这个空格);
2. 对于上次分割后右侧的字符串,小明继续扫描,第一次遇到连续两个空格后停止,并将字符串分割为左右两个部分(舍弃用于分割的这两个空格);
3. 对于上次分割后右侧的字符串,小明继续扫描,第一次遇到连续三个空格后停止,并将字符串分割为左右两个部分(舍弃用于分割的这三个空格);
4. 以此类推,小明每分割一次,下一次分割就需要更长的连续空格;直到字符串无法再次分割。
最后输出每次分割的左侧的字符串,以及最后一次分割的右侧字符串。
如果字符串完全无法进行任何一次分割,直接输出其本身。
【输入格式】
输入一行,一个字符串。
【输出格式】
输出若干行。每行为分割后的一个字符串,注意依次输出:
第一次分割左侧的字符串,第二次分割左侧的字符串,……,最后一次分割左侧的字符串,最后一次分割右侧的字符串。
【输入样例】
sdfd 55 55 99312
【输出样例】
sdfd
55 55
99312
【数据范围】
字符串长度不超过 1000,字符串中只包含大写字母、小写字母,数字,或空格,且输入字符串不会以空格结尾。
特别强调:输入仅一行,但可能包含若干空格。
【算法分析】
● s.find(t); → 在主串中,从下标 0 这个位置开始往后查找子串 t,返回子串 t 在主串 s 中第一次出现的起始下标。
● s.find(t, pos); → 在主串中,从下标 pos 这个位置开始往后查找子串 t,返回子串 t 在主串 s 中第一次出现的起始下标。
● s.find(*) 返回值类型为 size_t(无符号整型)。
若匹配到子串,返回合法下标(非负),赋值给 int 可正常运行;
若查找失败,则返回 string::npos,它是 size_t 所能表示的最大值。将这个极大无符号值强制转换为 int 时,会得到负数。
若字符串长度超出 int 上限,转换会发生溢出,在竞赛中引发“未定义行为”。所以,推荐使用 size_t 类型变量接收 s.find() 的返回值。
【算法代码一】
【算法代码二】
string spa(cnt, ' '); // 生成包含 cnt 个空格的字符串 spa。
【参考文献】

浙公网安备 33010602011771号