c 计算文件字符数,行数,单词数

本文介绍了一个使用C语言编写的程序,该程序能够读取指定文件,并统计其中的行数、单词数和字符数。通过定义宏来改变输出颜色,增强代码的可读性。程序首先打开文件,然后逐字符读取并打印,同时进行统计。
#include <stdio.h>
#include <stdlib.h>
#include <zconf.h>

#define NONE                 "\e[0m"
#define BLUE                 "\e[0;34m"
#define GREEN                "\e[0;32m"
#define RED                  "\e[0;31m"

#define PRINT_WITH_RED(fmt, ...) \
    printf(RED fmt NONE, ##__VA_ARGS__);

#define PRINT_WITH_GREEN(fmt, ...) \
    printf(GREEN fmt NONE, ##__VA_ARGS__);

#define PRINT_WITH_BLUE(fmt, ...) \
    printf(BLUE fmt NONE, ##__VA_ARGS__);

int main()
{
    int ch, iLineCount, iWordCount, iCharCount;
    iLineCount = iWordCount = iCharCount = 0;

    FILE *fp;

    if((fp = fopen("/home/programs/clion/main.cpp", "r")) == NULL)
    {
        printf("can not open file\n");
        exit(0);
    }
    while ((ch = fgetc(fp)) != EOF)
    {
        printf("%c ", ch);
        ++iCharCount;
        PRINT_WITH_BLUE("char +1: %d ", iCharCount);
        if (ch == '\n')
        {
            ++iLineCount;
            PRINT_WITH_RED("line +1: %d ", iLineCount);
        }
        if (ch == ' ' || ch == '\n' || ch == '\t')
        {
            PRINT_WITH_GREEN("words +1: %d ", iWordCount);
            ++iWordCount;
        }
        putchar('\n');
    }

    printf("line: %d, words: %d, char: %d\n", iLineCount, iWordCount, iCharCount);

    fclose(fp);

    return 0;

}运行结果

<think>嗯,用户现在想知道在Ubuntu中如何统计文件行数词数字符数。之前他们问过如何查看日期并写入文件,现在可能是在处理日志或文本文件,需要进一步分析。首先,我应该回忆常用的Linux命令。 记得`wc`命令是用来统计这些信息的。不过用户可能需要具体的例子和不同选项的区别。比如,`-l`是行数,`-w`是词数,`-c`是字符数,还有`-m`可能和字符编码有关?需要确认一下。 用户可能不太清楚各个参数对应的输出是什么,所以需要明确说明每个选项的作用。另外,他们可能想知道如何同时获取多个统计值,比如同时显示行数词数字符数。这时候直接使用`wc`不带选项就可以,但需要说明输出顺序。 还有,用户可能遇到文件名中有空格的情况,这时候是否需要引号?或者如何处理多个文件?比如统计多个文件并显示总计,这时候`wc *`可能会用到,但要注意解释清楚输出格式。 另外,用户可能有兴趣知道如何结合其他命令,比如只获取行数而不显示文件名,可以通过`<`重定向或者`cat`命令。或者使用`echo`结合管道来统计字符串而不是文件。 需要检查是否有常见的问题,比如权限不足无法读取文件,或者文件不存在的情况,这时候`wc`会报错,可能需要提示用户检查文件路径和权限。 还有,用户可能对“词”的定义有疑问,比如是否以空格分隔,或者特殊符号如何处理。根据`wc`的文档,词是以空格、制表符或换行符分隔的字符串,这可能和用户的预期一致,但需要简说明。 另外,中文字符的统计是否会有问题?比如在UTF-8编码下,`-c`和`-m`的区别。`-c`是字节数,而`-m`是字符数,对于多字节字符(如中文),这两者会有差异。比如一个中文字符通常是3个字节,所以需要根据用户需求推荐使用哪个选项。 最后,用户可能需要一些实际例子,比如统计一个代码文件行数,或者日志文件中的词数,这时候给出具体命令和输出示例会更有帮助。 总结回答结构:先介绍`wc`命令,然后分别解释各个选项,给出示例,再说明组合使用和常见用例,最后注意事项或进阶技巧。这样用户能逐步了解如何操作,并解决可能遇到的问题。</think>以下是**在Ubuntu中统计文件行数词数字符数**的详细指南: --- ### 一、核心命令 `wc` ```bash wc 文件名 ``` **输出格式**: `行数 词数 字符数 文件名` #### 📝 示例 统计文件`log.txt`: ```bash wc log.txt ``` **输出示例**: `45 209 1320 log.txt` 表示:45行、209个词、1320字节 --- ### 二、独立统计模式 | 需求 | 命令 | 说明 | |--------------|---------------------|-----------------------------| | **仅统计行数** | `wc -l 文件名` | 输出`行数 文件名` | | **仅统计词数** | `wc -w 文件名` | 输出`词数 文件名` | | **仅统计字符数** | `wc -m 文件名` | 支持多字节字符(如中文) | | **统计字节数** | `wc -c 文件名` | 按存储大小计算(1个汉字=3字节)| --- ### 三、高频使用场景 #### 📂 **统计目录下所有文本文件** ```bash wc *.txt # 统计所有txt文件 ``` #### ➕ **显示总计(多文件统计)** ```bash wc -l *.log # 统计所有log文件行数及总行数 ``` #### 🔧 **结合管道统计输出** 统计`ps aux`进程列表的行数: ```bash ps aux | wc -l ``` --- ### 四、进阶技巧 #### 🔢 **统计代码文件有效行数(排除空行)** ```bash grep -v '^$' code.py | wc -l ``` #### 🌐 **统计中文字符** ```bash # 统计UTF-8文件字符数(1个汉字=1字符) wc -m chinese.txt ``` #### 📊 **批量统计并生成报告** ```bash wc -l *.log > report.txt # 将所有log文件行数写入report.txt ``` --- ### 五、注意事项 | 常见问题 | 解决方案 | |------------------------|----------------------------------| | **权限不足** | 使用`sudo wc 文件名` | | **文件名含空格** | 用引号包裹文件名:`wc "my file.txt"` | | **统计目录** | 需配合`find`:`find . -name "*.txt" -exec wc -l {} \;` | --- ### 六、操作示意图 ```text 统计流程: ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 选择统计维度 │ → │ 执行wc命令 │ → │ 解析输出结果 │ └──────────────┘ └──────────────┘ └──────────────┘ -l/-w/-m/-c wc [选项] 文件 行数 词数 字符数 ``` 掌握这些方法后,您可以快速完成文本分析、日志统计等常见任务。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值