小刘是动漫《鬼灭之刃》的忠实粉丝。喜欢音乐的他想用猪肉骨(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; }