# 第二次作业 **Repository Path**: wang01130/second-assignment ## Basic Information - **Project Name**: 第二次作业 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-30 - **Last Updated**: 2026-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 命令行文本计数统计程序 **作者:王崇哲** 基于 C99 的命令行文本统计工具,类似 Linux 的 `wc` 命令,支持字符、单词、句子、代码行、空行和注释行统计。 ## 1. 当前版本 当前为 **v0.3 扩展功能版本**,已实现: - `-c`:统计字符数 - `-w`:统计单词数 - `-s`:统计句子数 - `-l`:统计代码行 - `-b`:统计空行 - `-m`:统计注释行 ## 2. 开发环境 - Windows - Dev-C++ 5.11 - C99 - MinGW GCC ## 3. 编译方法 用 Dev-C++ 打开: ```text src\wc.dev ``` 按 `F11` 编译并运行。 项目源文件: ```text src\main.c src\wc.c src\wc.h ``` ## 4. 使用方法 先进入 `src` 目录: ```bat cd /d D:\c-projects\text-counter\src ``` ### 4.1 基础功能 ```bat wc.exe -c sample.txt wc.exe -w sample.txt wc.exe -s sample.txt ``` 运行结果: ```text D:\c-projects\text-counter\src>wc.exe -c sample.txt Characters: 120 D:\c-projects\text-counter\src>wc.exe -w sample.txt Words: 23 D:\c-projects\text-counter\src>wc.exe -s sample.txt Sentences: 3 ``` ### 4.2 扩展功能 ```bat wc.exe -l sample.txt wc.exe -b sample.txt wc.exe -m sample.txt ``` 运行结果: ```text Code lines: 3 Blank lines: 0 Comment lines: 0 ``` 再使用带有注释和空行的示例文件: ```bat wc.exe -l comment_sample.txt wc.exe -b comment_sample.txt wc.exe -m comment_sample.txt ``` 运行结果: ```text Code lines: 6 Blank lines: 1 Comment lines: 4 ``` ### 4.3 参数总表 | 参数 | 功能 | 示例 | | --- | --- | --- | | `-c` | 字符数 | `wc.exe -c sample.txt` | | `-w` | 单词数 | `wc.exe -w sample.txt` | | `-s` | 句子数 | `wc.exe -s sample.txt` | | `-l` | 代码行 | `wc.exe -l sample.txt` | | `-b` | 空行 | `wc.exe -b sample.txt` | | `-m` | 注释行 | `wc.exe -m sample.txt` | ## 5. 统计规则 ### 5.1 字符数 统计文件中的全部字符,包括空格、标点和换行符。Windows 文本模式会把 `CRLF` 转换为 `LF` 后再统计。 ### 5.2 单词数 按空白字符分隔,连续的非空白内容算一个单词。 ### 5.3 句子数 以 `.`、`!`、`?` 作为句子结束标志: - 连续的 `...`、`?!` 只算一次结束; - 最后一段没有标点但包含文字时也算一句; - 空文本和只有标点的内容算 0 句。 ### 5.4 代码行、空行、注释行 - **代码行**:包含代码的行。代码后面带 `//` 或 `/* ... */` 注释,仍然算代码行。 - **空行**:只有空白字符、没有代码也没有注释的行。 - **注释行**:只包含注释、没有代码的行。 - 多行注释 `/* ... */` 内部的每一行都算注释行。 - 多行注释内部的空行也算注释行,不算空行。 - 字符串中的 `http://`、`/* ... */` 不会被误认为注释。 - 支持单行注释 `//` 和多行注释 `/* ... */`,并处理字符串、字符常量中的转义字符。 ## 6. 运行截图 基础功能: ![基础功能运行截图](docs/screenshots/01-basic-functions.png) 代码行和空行: ![代码行和空行运行截图](docs/screenshots/02-extension-lines.png) 注释行: ![注释行运行截图](docs/screenshots/03-comment-lines.png) ## 7. 文件列表 | 文件 | 说明 | | --- | --- | | `src\main.c` | 命令行入口,解析参数并调用统计函数 | | `src\wc.c` | 核心统计函数和注释识别逻辑 | | `src\wc.h` | 函数声明和行统计结构体 | | `src\wc.dev` | Dev-C++ 项目文件 | | `src\sample.txt` | 基础功能示例文本 | | `src\comment_sample.txt` | 带注释和空行的示例文本 | | `tests\test_wc.c` | 单元测试源代码 | | `tests\run_tests.bat` | 双击运行单元测试 | | `tests\performance_test.c` | `clock()` 性能测试源代码 | | `tests\run_performance.bat` | 双击运行性能测试 | | `docs\screenshots\01-basic-functions.png` | 基础功能截图 | | `docs\screenshots\02-extension-lines.png` | 代码行和空行截图 | | `docs\screenshots\03-comment-lines.png` | 注释行截图 | | `docs\performance\performance-result.txt` | 性能测试结果 | | `README.md` | 项目说明文档 | | `AI_Prompts.md` | AI 对话提示词记录 | | `.gitignore` | Git 忽略规则 | ## 8. 单元测试 在项目根目录双击: ```text tests\run_tests.bat ``` 也可以在 cmd 中执行: ```bat cd /d D:\c-projects\text-counter tests\run_tests.bat ``` 当前共 **34 项测试**,覆盖: - 空文本和空文件; - 普通字符、单词、句子统计; - 空格、制表符、换行符; - 连续句末标点; - 没有句末标点的最后一句; - 代码行、空行、注释行; - 单行注释和多行注释; - 字符串中的 `//` 和 `/* ... */`; - 文件不存在。 测试结果: ```text 34 tests run, 0 failed All unit tests passed. ``` ## 9. 性能测试 性能测试使用 C 标准库的 `clock()` 函数,输入为约 0.82 MB 的重复英文文本,统计函数各执行 100 次,编译优化选项为 `-O2`。 在项目根目录双击: ```text tests\run_performance.bat ``` 或在 cmd 中执行: ```bat cd /d D:\c-projects\text-counter tests\run_performance.bat ``` 本机测试结果: ```text === wc performance test === Input size: 0.82 MB Iterations: 100 CLOCKS_PER_SEC: 1000 Characters : 0.002 s result=860000 Words : 0.131 s result=170000 Sentences : 0.116 s result=20000 Line stats : 0.131 s result=10000 Total measured time: 0.380 s ``` 完整结果保存在: ```text docs\performance\performance-result.txt ``` > 性能数据与 CPU、编译器优化选项有关,在不同电脑上会有所不同。 ## 10. 版本记录 | 版本 | 内容 | | --- | --- | | v0.1 | 空项目,完成开发环境和项目骨架 | | v0.2 | 完成基础功能 `-c / -w / -s`、单元测试和 README | | v0.3 | 完成扩展功能 `-l / -b / -m`、34 项单元测试和性能测试 | ## 11. 已知限制 - 只处理纯英文文本。 - 句子统计采用简化规则,英文缩写 `Mr.`、小数 `3.14` 可能被误判为句子结束。 - 一次只能使用一个统计参数。 - 没有专门处理反斜杠续行、trigraph 等极端 C 语法情况。 - 不统计中文分词。 ## 12. AI 提示词 按照作业要求,AI 对话提示词单独记录在: ```text AI_Prompts.md ``` 没有混入本 README。