黑马程序员技术交流社区

标题: 我这边有个关于计算单词个数的小疑问 [打印本页]

作者: qiujunwen123    时间: 2015-12-19 20:57
标题: 我这边有个关于计算单词个数的小疑问
#include<stdio.h>
int main(){
       
        printf("Shu Ru Zi Fu Chuan:\n");
        char zifuchuan[100];
        gets(zifuchuan);
        int i=0;
        int dancishu;//定义变量计算单词个数
         
        //判断是以空格开头还是以字母开头
        if(zifuchuan[0]!=' ')
         dancishu=1;//字母开头,第一个单词没计算进去需要加1
         else
         dancishu=0;//空格开头正常计算
          
        while(zifuchuan[i]!='\0'){
                if(zifuchuan[i]==' '&&zifuchuan[i+1]!=' '){            
//问题出现在这里,最后一个单词后面如果有空格的话再回车,单词的个数会加一,该如何解决
                        dancishu++;
                }
                i++;
        }
        printf("Dan Ci Shu Wei:%d\n",dancishu);
        return 0;       
}


作者: Tmac90301    时间: 2015-12-20 00:48
本帖最后由 Tmac90301 于 2015-12-20 00:51 编辑

你这里判断只考虑了空格作为字符串分隔符,当前一个字符是空格而下一个字符不是空格时,单词数就+1.回车符当然不算空格,所以空格之后跟回车,单词数会增加.解决方法,当然就是把回车符也加入到判断当中
作者: qiujunwen123    时间: 2015-12-20 16:09
Tmac90301 发表于 2015-12-20 00:48
你这里判断只考虑了空格作为字符串分隔符,当前一个字符是空格而下一个字符不是空格时,单词数就+1.回车符当 ...

我将回车看为!=\n 或者!=\r 都不对,单词个数还是加1
作者: Tmac90301    时间: 2015-12-22 13:04
qiujunwen123 发表于 2015-12-20 16:09
我将回车看为!=\n 或者!=\r 都不对,单词个数还是加1

你最后输入的字符是空格,而空格的下一个字符是'\0',所以你判断不是回车,并没有用。你懂了吗?之前忘了用gets函数获取字符串是不接收'\n'的

你这里判断单词,最好是判断当前字符和前面一个字符。当前字符是字符,而前一个字符是空格,就让单词数+1,处理一下首字符的问题就好了,如果首字符不为空格,则单词数+1,之后的都是当前字符不为空格,而前一个字符是空格,就单词数+1
作者: Tmac90301    时间: 2015-12-22 13:10
本帖最后由 Tmac90301 于 2015-12-22 13:21 编辑
qiujunwen123 发表于 2015-12-20 16:09
我将回车看为!=\n 或者!=\r 都不对,单词个数还是加1
所以,不要用判断当前字符和下一个字符这种方式,用我上面说的判断当前字符和前一个字符这种。遍历最好也不要用while(str != '\0')这种,用for循环,遍历范围控制在strlen(str)以内就可以了
作者: qiujunwen123    时间: 2015-12-23 15:37
Tmac90301 发表于 2015-12-22 13:10
所以,不要用判断当前字符和下一个字符这种方式,用我上面说的判断当前字符和前一个字符这种。遍历最好也不 ...

for应该可以解决,我抽时间,试试,谢谢啊,哥们
作者: junjunzhang    时间: 2015-12-23 21:50
思路不对
作者: qiujunwen123    时间: 2015-12-24 11:17
junjunzhang 发表于 2015-12-23 21:50
思路不对

思路没啥问题,检测到空格后判断下一个是否为字母,就可以了
作者: chensc    时间: 2015-12-24 20:55
学习学习!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2