c语言程序设计第7章 统计单词数量

#include <stdio.h>
#include <unistd.h>
#include <ctype.h>
#include <stdbool.h>

int main(void) 
{ 
    char ch;        // 输入的字符
    char pre;       // 用于保存前一个字符
    int n_chars = 0;    // 字符数
    int n_words = 0;    // 单词单词
    int n_lines = 0;    // 行数
    int p_lines = 0;    // 不完整不完整函数 
    _Bool status = false;   // 记录单词的标志位
    
    while('|' != (ch = getchar()))
    {
        n_chars++;
        
        if('\n' == ch)
            n_lines++;
        
        if(isalpha(ch) && !isspace(ch) && !status)
        {
            status = true;
            n_words++;
        }
        if(isspace(ch) && status)
            status = false;
        
        pre = ch;
        if('\n' != pre)
            p_lines = 1;
        
    }
    printf(" 字符数:%d\n 行数:%d\n 单词数量:%d\n 不完整行数:%d\n ", n_chars, n_lines, n_words, p_lines);
    
	return 0;
}

在线运行的结果
在线运行结果
亮点在于标志位 status 的使用:
首先我们置 status 为false,在检测输入的是字符且非空格且status=false 时,我们计数+1 且将 status=true,再检测下次输入的字符,若下次输入的字符为空格且status = true时,说明一个单词结束(这里status之所以是true,是因为此时status的是前一次输入的字符的判断结果),此时置 status=false

关于字符操作函数需要包含头文件,以及常用字符判断函数如下

字符测试函数,需要包含下面头文件
 #include <ctype.h>
 
 函数原型				为真时返回 true,否则为false
 isalpha(ch)			字符
 isdigit(ch)			数字
 isalnum(ch)			字符或数字
 isspace(ch)			一切空白字符(1个空格~n个空格,包含换行符)
 ispunct(ch)			标点符号
 islower(ch)			小写字符
 isupper(ch)			大写字符
 isgraph(ch)			除空格以外任意可打印字符
 isprint(ch)			可打印字符	
 isblank(ch)			标准空白字符(不包含换行)   不常用
 
 字符映射函数		行为
 tolower(ch)		如果是大写字符则返回小写字符;否则,返回本身
 toupper(ch)		如果是小写字符则返回大写字符;否则,返回本身
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值