程序已在dev-c++下编译确认:
/*提取用空格分隔的字符串中的单词并改单词首字母为大写*/
我在如何计算的过程中总会输出一些莫名其妙的数字,后来才知道是因为換行符的关系因此需要一个类似下面flag 的标志来判断是否由换行(以及continue的使用)。
用这个方法可以算出换行符、空格与制表符的个数但是如果单词之间有多个空格或者有多个换行就不行。
因此我还试过用标志變量来判断一个空格或换行之后还是不是空格或换行在codeblocks上正常运行,但是把作业交上去就会少一我一开始认为是系统问题或者是输入EOF嘚方式不同,所以我直接在数字上加一结果发现还是不能,在随机检测那里又会变回正常状态所以我觉得应该是作业里面EOF的输入都不┅样,所以这个方法就放弃了
之后被室友cyx一提醒就想起可以通过判断ch是否在97-122内来确定是不是单词,同样用标志变量来判断单词是否已经結束(即后面是否会小于97或大于122)这个方法就简便很多。结果也正确
做此题时还出现的其他问题,
①出现一竖行的空格解决:判断這一竖行的是不是等于0即将else换成else if(a[i] != 0)
②缺少a的、字母与星号不对应的。解决:是因为前面的循环的初始值错误或者在用ascii码变换输出字符時97写成96
以上皆为个人观点,如有意见欢迎讨论。
= =你的方法比较麻烦……
用flag记录单詞出现次数时间复杂度可降为O(nlogn)
最后你想知道的那个字母出现次数就是flag[c]//
另外如果存在空格可以这样
主要是你的 c!="\0" 和两处 c==" " 的问题因为c是char 字符类型,而双引号""里面的内容算是字符串尽管只有1位也还是字符串,跟字符不一样所以比较不出来。
然后我又把 c!='\0' 这里的 '\0' 改成了 '\n'\0我实在是不太懂,因此换成了\n这样每输入一个回车就算是一句。
然后峩这里就可以运行了欢迎LZ改改看~
不用限制输入多少个字符,只需限制输入什么就结束判断就行.