花了这么长的时间来处理这道题目,如果不细致地进行总结的话,那我们的时间就白费了。通过本题目,我们其实可以积累非常多的字符串操作的方法。首先,字符串操作最困难的是字符串的存储,我们要存储不同行,行内空格分隔开的字符串。我们就固定使用字符数组来存储字符串,而使用字符数组需要我们提前去确定字符串的最大长度,题目当中往往会提到相关的线索。比如本题目当中就透漏说“每一行的字符数目不超过50”,那么我们就可以将字符数组的长度设定为51。为什么是51呢?因为,字符串的最后一位是'\0',我们必须要预留多一位的空间。
本题目当中还有一些烟雾弹,我们千万不要被迷惑了。题目对于字符串的输入分为不同的行以及行内又用空格来间隔,这唬住了不少的同学。首先,我们必须清楚,回车换行是一定会结束一个字符串的接收工作的。而空格则未必,取决于我们使用的输入方法,我们可以使用cin>>,但是在本题目中却无法判定输入的终点。所以,我使用的是scanf("%s",ch[i])的方式,我们可以判断当前的输入是否是终止符。
存储下来字符串之后,对于每个字符串,我们要判断它是否是一个新的菜品,使用了<string.h>当中的strcmp函数来完成判断。我的策略很简单,就是不断和之前的菜品进行比较,比对成功说明不是一个新的菜品。