C 统计英文文本word(单词)个数

状态机的使用

关于状态机的文章请自行百度,这里主要是在统计时用到了2个状态,IN是代表字符是属于word内,OUT代表当前字符不属于word内,那么什么时候word的个数需要增加1呢,即是status从OUT到IN时(说明当前指针马上就要走到word里了)
状态机

源码

#include <stdio.h>

#define IN 1
#define OUT 0
#define INIT OUT

int is_spliter(const char c)
{
    
    
    if ((' ' == c) || ('\n' == c) || ('\t' == c) ||
        ('\"' == c) || ('\'' == c) || ('+' == c) ||
        (',' == c) || ';' == c || '.' == c)
    {
    
    
        return 1;
    }
    return 0;
}

int count_word(const char *filename)
{
    
    
    int status = INIT;//默认状态
    int word = 0;
    FILE *file = fopen(filename, "r");
    if (!file)
        return -1;
    char c;
    while ((c = fgetc(file)) != EOF)
    {
    
    
        //当然,如果要做的好一点,肯定需要
        //正则表达式来判断一个字符是否是分隔符,这里就列出一些常见情况
        if (is_spliter(c))
        {
    
    
            status = OUT;
        }
        else if (status == OUT)//从分隔符进入到word的开始
        {
    
     
            status = IN;//在word内的状态
            ++word;
        }
    }
    return word;
}

int main(int argc, char *argv[])
{
    
    
    if (argc < 2)
        return -1;
    printf("count:%d\n", count_word(argv[1]));
    return 0;
}

说明

源码出自-腾讯课堂-king老师-linux基础课程
思考:如果一个word最后带-并且换行的情况

Guess you like

Origin blog.csdn.net/abcd552191868/article/details/121717966