题目描述
小d正在学习处理带空格的句子。现在要进行 次操作,每次操作有两种类型:
op == 1:输入一个包含空格的字符串(可能有多单词),输出该字符串中空格的数量。op == 2:先输入一个整数 ,再输入一个字符串(可能包含空格),将这个字符串重复输出 遍,每遍占一行。
请编写程序完成这些操作。
输入格式
第一行:一个整数 ,表示操作次数。
接下来 行,每行描述一个操作:
- 如果操作类型为 1:
1然后换行输入一个字符串(可能包含空格) - 如果操作类型为 2:
2然后换行输入一个整数 ,再换行输入一个字符串(可能包含空格)
注意:输入中可能包含多行,需要正确处理换行符。题目保证每类操作的输入格式固定。
输出格式
对于每个 op == 1,输出一个整数(空格数量)。
对于每个 op == 2,输出 行,每行内容为输入的字符串。
所有输出按操作顺序依次输出。
输入输出样例
样例输入 #1
3
1
Hello world!
2
3
C++ is fun
1
I love programming
(注意 I love programming 中 I 后三个空格,love 后两个空格,总共 5 个空格)
样例输出 #1
1
C++ is fun
C++ is fun
C++ is fun
5
样例输入 #2
4
1
No spaces
2
2
Happy learning
1
a b c
2
1
Hello world
样例输出 #2
1
Happy learning
Happy learning
2
Hello world
解释:
"No spaces"1个空格x=2,重复"Happy learning"两遍"a b c"有两个空格(a和b之间,b和c之间)→ 2x=1,输出一次"Hello world"(两个空格保留)
说明/提示
如何读取包含空格的字符串?
在 C++ 中,使用 cin >> 读入字符串会以空格为分隔符,无法读入空格。
要读入一整行(包括空格),需要使用 getline(cin, str) 函数。
注意:getline 会读取换行符前的所有字符,并且丢弃换行符。
在读取整数后,输入缓冲区中会留下一个换行符,此时直接 getline 会读到一个空行。
解决方法1:在需要读行之前,先调用 cin.ignore() 忽略掉残留的换行符。
解决方法2:在需要读字符串之前,先调用 getline(cin, str) 抵消掉残留的换行符,也就是双写getline。
注意事项
- 每次使用
getline前,如果前面有cin >>读取了基本类型(整数),一定要先清除换行符。 - 统计空格时,直接用
ch == ' '判断即可。 - 对于
op == 2,输入的字符串可能为空(只有空格?通常题目保证非空,但为严谨可处理)。按照样例,字符串可能包含多个连续空格,输出时应保留原样。 - 输出时,
op == 2的每个重复都占一行,末尾不要有多余空格。
数据规模
- 操作次数
- 每个字符串的长度(包括空格)
- 对于
op == 2,重复次数 - 字符串中只包含字母、数字、标点符号和空格,不包含特殊控制字符。