问题 4001 --《红蓮華》(完善程序)

4001: 《红蓮華》(完善程序)★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 125  解决: 77
[提交][状态][命题人:]

题目描述

小刘是动漫《鬼灭之刃》的忠实粉丝。喜欢音乐的他想用猪肉骨(pork bone)和速食面(instant noodles)来演奏鬼灭的经典op《红蓮華》。但他看不懂复杂的歌谱,"要是能直接告诉我什么时候用猪肉骨,什么时候用速食面就好了!"

歌谱中有 'o'(代表使用猪肉骨)、'x'(代表使用速食面)、还有空格(代表休止符0)。

在读取歌谱中遇到了不同字符的时候,需记下之前的相同字符出现的次数并归为一类。输出该类名称及次数。如这段歌谱ooox只有两个部分,分别表示为pork bone (为出现字符'o'的名称)3(字符'o'出现三次)以及instant noodles(为出现字符'x'的名称) 1(字符'x'出现了一次)。而若出现了空格,每个空格相应输出一个0(表示休止符的名称)然后换行。

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
struct tool
{
	int count;//记使用次数 
	string kind;//表示使用乐器 
};
int main()
{  	
	tool x[100];
	for (int i=0;i<100;i++)
	_____(1)______
	char rhythms[100];
	______(2)______//读入整行歌谱 
	int j=0;
	for (int i=0;i<strlen(rhythms);i++)
	{
		if (_____(3)_______)
		{
			j++;
		}
		//读取到与之前不同字符的就换下一个数组重新计数,显然j会从1开始 
		//要先有这个判断条件,不然读取到不同字符,之前存好的数组名会改变
		//由于此种判断条件的缺陷,得考虑一开始输入空格之后字符不同以及字符之后为空格的情况,不然会多输出一个休止符 
		if (rhythms[i]==' ')
		{
			j++; 
		}//遇到空格就跳过读下一个字符,而记录空格的x[i]直接以0输出
		if (rhythms[i]=='o')
		{
			x[j].kind="pork bone";
			x[j].count++;
		}
		if (rhythms[i]=='x')
		{
			x[j].kind="instant noodles";
			x[j].count++;
		}
	}
	for (_____(4)______)
	cout<<x[i].kind<<" "<<x[i].count<<endl;
}

输入

一行歌谱(包括空格字符总数不超过100)

输出

见样例(即使用的乐器和次数)

样例输入
Copy
oox oox xxoxo
样例输出
Copy
pork bone 2                                                 
instant noodles 1                                           
 0                                                          
pork bone 2
instant noodles 1
 0
instant noodles 2
pork bone 1
instant noodles 1
pork bone 1

提示

输出休止符前面有空格,输入几个空格就要有几个休止符输出

来源

[提交][状态]