week4-[字符数组]英语作文
week4-[字符数组]英语作文
题目背景
abslime正在写一篇英语作文,但是他不小心在很多单词之间插入了过多的空格,现在他希望把多余的空格去掉,使得相邻两个单词之间只有恰好一个空格,并且希望知道他多输入了多少个空格。
题目描述
给定abslime写的英语作文,其中仅包含若干个单词和空格(为了简化起见,这里没有考虑标点符号)。每个单词仅由大小写英文字母组成,且相邻两个单词之间至少有一个空格。需要输出去掉多余空格的英语作文,以及abslime多输入了多少个空格。
输入格式
输入一行,为一个仅包含英文字母和空格的字符串,表示abslime写的英语作文(保证第一个字符和最后一个字符一定不是空格)。
输出格式
输出两行,第一行为去掉多余空格的英语作文。第二行为一个整数,表示abslime多输入了多少个空格。
样例 #1
样例输入 #1
Suppose you are going to spend a whole month in a remote island
样例输出 #1
Suppose you are going to spend a whole month in a remote island
12
样例 #2
样例输入 #2
To begin with we should make clear of the conception of innovative capability
样例输出 #2
To begin with we should make clear of the conception of innovative capability
18
样例 #3
样例输入 #3
you shall not pass
样例输出 #3
you shall not pass
8
提示
数据范围
对于所有输入数据,输入字符串的总长度不超过 200020002000。
这道题其实就是字符串处理:把多余的空格压缩掉,并统计多余空格数量。
🔎 思路解析
- 输入一行字符串
s
(保证首尾不是空格)。 - 遍历字符串,维护一个新字符串
result
。- 如果遇到字母 → 直接加入
result
。 - 如果遇到空格:
- 如果上一个字符不是空格 → 在
result
加一个空格。 - 如果上一个字符是空格 → 说明是“多余空格”,不加到
result
,但计数器extra++
。
- 如果上一个字符不是空格 → 在
- 如果遇到字母 → 直接加入
- 遍历完成后,
result
就是压缩后的作文,extra
就是多余的空格数量。 - 输出
result
和extra
。
📝 C++ 实现
#include <iostream>
#include <string>
using namespace std;int main() {string s;getline(cin, s); // 输入整行,包括空格string result;int extra = 0;bool lastSpace = false;for (char ch : s) {if (ch == ' ') {if (!lastSpace) {result += ' ';lastSpace = true;} else {extra++; // 多余空格}} else {result += ch;lastSpace = false;}}cout << result << "\n" << extra << endl;return 0;
}