P1115 string含空格字符串的处理

暂无评定 传统题 GESP字符串STL语法基础 上传者
时间限制1000ms
内存限制256MiB
通过 / 提交0/0

P1115string含空格字符串的处理

暂无评定 传统题 GESP字符串STL语法基础 上传者
时间限制1000ms
内存限制256MiB
通过 / 提交0/0

题目描述

小d正在学习处理带空格的句子。现在要进行 n n 次操作,每次操作有两种类型:

  • op == 1:输入一个包含空格的字符串(可能有多单词),输出该字符串中空格的数量。
  • op == 2:先输入一个整数 x x ,再输入一个字符串(可能包含空格),将这个字符串重复输出 x x 遍,每遍占一行。

请编写程序完成这些操作。

输入格式

第一行:一个整数 n n ,表示操作次数。
接下来 n n 行,每行描述一个操作:

  • 如果操作类型为 1:1 然后换行输入一个字符串(可能包含空格)
  • 如果操作类型为 2:2 然后换行输入一个整数 x x ,再换行输入一个字符串(可能包含空格)

注意:输入中可能包含多行,需要正确处理换行符。题目保证每类操作的输入格式固定。

输出格式

对于每个 op == 1,输出一个整数(空格数量)。
对于每个 op == 2,输出 x x 行,每行内容为输入的字符串。
所有输出按操作顺序依次输出。

输入输出样例

样例输入 #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之间)→ 2
  • x=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 的每个重复都占一行,末尾不要有多余空格。

数据规模

  • 操作次数 1≤n≤100 1 \le n \le 100
  • 每个字符串的长度(包括空格) 1≤∣s∣≤200 1 \le |s| \le 200
  • 对于 op == 2,重复次数 1≤x≤10 1 \le x \le 10
  • 字符串中只包含字母、数字、标点符号和空格,不包含特殊控制字符。