统计单词个数-C语言实现

统计单词个数-C语言实现

问题描述:

统计用户输入的句子中的单词的个数,比如:

input: hello world! I am the c.
output: 6


程序思想:

  1. 设置一个单词计数器:num

  2. 设置一个使能变量: numEnable,该使能变量的功能就是:
    2.1 当numEnable等于0的时候不能进行num++操作
    2.2 当numEnable非0时,则可以进行num++操作

  3. 初始时num=0, numEnable=1

  4. 遍历用户输入的字符串,遍历的过程中做如下处理:
    4.1 第一次遍历到26个字母时(不区分大小写),由于numEnable=1,因此执行num++,因为第一次遍历到字母说明这个字母一定是单词的首字母。接着就将numEnable=0,禁用程序计数器。

    4.2 直到遍历的字母不是26个字母的时候并且也不是'字符的时候才置numEnable=1,因为遇到这些字符的时候,说明下一个单词要开始了。这个时候就可以继续计数了。


上代码:

#include <stdio.h>

/*****************************************************
** describe: 
** 		判断当前字符c是不是属于26个字母,不论大小。
** param: 
** 		1) c: 带判断的字符。
** return:
** 		int: 如果c属于26个字母,那么就返回1,否则返回0
*****************************************************/
int
isAlphabet(char c) {
    return (c <= 'z' && c >= 'a') || (c <= 'Z' && c >= 'A');
}

/**********************************************************
** describe:
**		统计一个字符串中单词的个数(当然不确保单词是合法的单词)
**		比如:hhh, nihao 这也算是两个单词,虽然单词表里面没有。
** param:
** 		1) str: 待统计的字符串
** return: 返回str中单词的个数
***********************************************************/
int
wordNum(const char *str) {
    int numEnable = 1; // 计数器使能开关
    int num = 0; // 计数器

    char *cur = str; // cur指向当前正在遍历的字符
    // while 循环用于遍历字符
    while (*cur) {
        // 如果当前是字母
        if (isAlphabet(*cur)) {
            // 并且计数器使能开关是打开的,才可以计数
            if (numEnable) {
                num++;
                numEnable = 0; 
            }
        }else {
            // 仅当遍历到的字符不是26个字母并且不是'时,才开启计数器使能开关
            if (!isAlphabet(*cur) && *cur != '\'')
                numEnable = 1;
        }
        // 遍历下一个字符
        cur++;
    }

    return num;
}

int main(void) {
    const char *s = "   hello, let's go!!!   ";
    printf("%d\n", wordNum(s));
    return 0;
}

程序运行结果:

在这里插入图片描述

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值