首页 新闻 会员 周边 捐助

C语言中,怎么也可以根据标点符号来计算单词数?

0
悬赏园豆:5 [已解决问题] 解决于 2013-12-02 10:43

用C来计算字符串中单词数时,可以如下:

int countword(char list[])
#define YES 1
#define NO 0
{
    int i,inaword,count =0;
    inaword = NO;
    for(i = 0;list[i] != '\0';i++)
    {
       if(list[i] == ' ')
           inaword = NO;
       else if(inaword == NO)
       {
           inaword = YES;
           count++;
        }
    }
    return(count);
}  

可是这只是根据空格来计算,不可以根据标点符号来,万一两个词之间有一个逗号,咋办?

lgyblog的主页 lgyblog | 初学一级 | 园豆:199
提问于:2013-12-01 17:36
< >
分享
最佳答案
0

一般的英语文章的规则是:标点符号后面要有一个空格以示区分,并且也有例如冒号引号等连用的标点符号。

按照LZ的代码会造成重复计算的问题。

所以应该在

else if(inaword == NO)
       {
           inaword = YES;
           count++;
        }

这一段的判断条件后另加一个判断当前字符是否是字母的条件。

也就是

else if(inaword == NO && (isalnum(list[i]))
       {
           inaword = YES;
           count++;
        }

前面的

if(list[i] == ' ')
           inaword = NO;

判断条件可改成

if(!isalnum(list[i]))
           inaword = NO;

记得要#include <ctype.h>

收获园豆:5
飞鸟_Asuka | 菜鸟二级 |园豆:393 | 2013-12-02 09:04

哦,好,谢谢哈

lgyblog | 园豆:199 (初学一级) | 2013-12-02 10:35
其他回答(2)
0

if(list[i] == ' ')改成if(list[i] == ' '||list[i]==","||list[i]==";"||list[i] == '.')或者更多的符号

拾梦小侠ด้้้ | 园豆:713 (小虾三级) | 2013-12-02 00:35

嗯,谢谢

支持(0) 反对(0) lgyblog | 园豆:199 (初学一级) | 2013-12-02 10:35
0

可以将计数条件改为:顺序扫面字符串,若出现非字母的字符则单词数加1,否则继续

我非英雄 | 园豆:250 (菜鸟二级) | 2013-12-02 08:36

是哦,谢了哈

支持(0) 反对(0) lgyblog | 园豆:199 (初学一级) | 2013-12-02 10:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册