C++信息竞赛例题解析——字符串
最近我们刚讲了C++字符串的应用。有一道例题,我印象很深。

对于我个人来说,这道题有几个难点:
程序中如何才能定位每一行的第一个字符并且确认其大小写?
如何才能把所有的“药品名”用一个string包含进去?

针对第一个问题,准备利用cin的特性来解决。如图7-11行。当我们回车的时候,a也会随之增加,如此我们就可以将药品名称逐一分别存储了。
在改写字母大小写的栏目里,我使用了双重循环。第一个判定就把首字母的大小写完美解决了。而针对需要全部小写的其他字母,我在下面的if里面逐个判定更正,为了防止在查找大写字母时把头个字母变成小写,我就将13行的b直接赋值为1,避开首字母的位置medicine[a][0],理论上这样就完美了。
但是

到了这里又是一个难点:特殊情况。
我也是百思不得其解,直到我尝试着只输入一个字母的时候,问题出现了(话说哪有一个字母的药名啊)

然后我才意识到了:当前面的“kind变量等于1的时候,整个13-19行的for循环根本不会执行!也就没有大小写的转换了。要想克服这种情况,13行b的赋值必须是0。到最后,我的解决方案是这样 的:

到最后,程序终于通过。


