A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#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;       
}

8 个回复

倒序浏览
本帖最后由 Tmac90301 于 2015-12-20 00:51 编辑

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

我将回车看为!=\n 或者!=\r 都不对,单词个数还是加1
回复 使用道具 举报
qiujunwen123 发表于 2015-12-20 16:09
我将回车看为!=\n 或者!=\r 都不对,单词个数还是加1

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

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

for应该可以解决,我抽时间,试试,谢谢啊,哥们
回复 使用道具 举报
思路不对
回复 使用道具 举报

思路没啥问题,检测到空格后判断下一个是否为字母,就可以了
回复 使用道具 举报
chensc 金牌黑马 2015-12-24 20:55:00
9#
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马