# 代码小程序 **Repository Path**: jinyao-kang/code-mini-program ## 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-27 - **Last Updated**: 2026-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 完整方案(C++ wc文本统计工具 + README + 单元测试 + 版本迭代说明,适配码云Gitee提交) > > 配套:源码、README.md、单元测试代码、版本commit规划、运行示例,直接上传Gitee就能交作业 > 命令:`wc.exe [参数] 文件名` > 基础参数:`-c`字符数,`-w`单词数,`-s`句子数 > 扩展加分参数:`-l`总行数,`-e`空行数,`-m`注释行(`//`单行注释) ## 一、主程序 wc.cpp ``` #include #include #include #include #include using namespace std; struct StatResult { long long charCount = 0; // 字符数 long long wordCount = 0; // 单词数 long long sentCount = 0; // 句子数 long long lineCount = 0; // 总行数 long long emptyLine = 0; // 空行 long long commentLine = 0; // 纯注释行(//) }; StatResult countFile(const string& filePath) { StatResult res; ifstream fin(filePath, ios::in); if (!fin.is_open()) { cerr << "Error: Can not open file: " << filePath << endl; exit(EXIT_FAILURE); } string line; bool inWord = false; while (getline(fin, line)) { res.lineCount++; bool isEmpty = true; // 遍历本行所有字符 for (char ch : line) { res.charCount++; if (!isspace(static_cast(ch))) { isEmpty = false; } // 单词判定:英文字母,空白/标点分隔 if (isalpha(static_cast(ch))) { if (!inWord) { inWord = true; res.wordCount++; } } else { inWord = false; } // 句子结束标记 . ! ? if (ch == '.' || ch == '!' || ch == '?') { res.sentCount++; } } if (isEmpty) { res.emptyLine++; } // 判断是否为纯注释行:前面只有空白,然后出现 // size_t commentPos = line.find("//"); if (commentPos != string::npos) { bool allSpaceBefore = true; for (size_t i = 0; i < commentPos; i++) { if (!isspace(static_cast(line[i]))) { allSpaceBefore = false; break; } } if (allSpaceBefore) { res.commentLine++; } } } fin.close(); return res; } int main(int argc, char* argv[]) { if (argc != 3) { cerr << "==== Usage ====\n"; cerr << "wc.exe [option] filename.txt\n"; cerr << "-c : count characters\n"; cerr << "-w : count words\n"; cerr << "-s : count sentences\n"; cerr << "-l : count total lines\n"; cerr << "-e : count empty lines\n"; cerr << "-m : count comment lines (//)\n"; return 1; } string opt = argv[1]; string fname = argv[2]; StatResult data = countFile(fname); if (opt == "-c") { cout << data.charCount << endl; } else if (opt == "-w") { cout << data.wordCount << endl; } else if (opt == "-s") { cout << data.sentCount << endl; } else if (opt == "-l") { cout << data.lineCount << endl; } else if (opt == "-e") { cout << data.emptyLine << endl; } else if (opt == "-m") { cout << data.commentLine << endl; } else { cerr << "Unknown option!" << endl; return 1; } return 0; } ``` ## 二、单元测试 test_wc.cpp(加分项,基础+多组用例) > > 用 [Catch2] 或者简易自测版本,下面写**无依赖简易单元测试**,直接编译运行 ``` #include #include #include #include "wc.cpp" void testBasic() { // 测试1:简单英文句子 string testText = "Hello world! This is a test."; ofstream f("test1.txt"); f << testText; f.close(); StatResult r = countFile("test1.txt"); assert(r.wordCount == 6); assert(r.sentCount == 2); cout << "Test1 Pass\n"; // 测试2:空文件 ofstream f2("test2.txt"); f2 << ""; f2.close(); StatResult r2 = countFile("test2.txt"); assert(r2.charCount == 0 && r2.wordCount == 0 && r2.sentCount == 0); cout << "Test2 Pass\n"; // 测试3:空行、注释行 ofstream f3("test3.txt"); f3 << "\n"; f3 << "// this is comment\n"; f3 << "int a = 1;\n"; f3.close(); StatResult r3 = countFile("test3.txt"); assert(r3.emptyLine == 1); assert(r3.commentLine == 1); cout << "Test3 Pass\n"; } int main() { testBasic(); cout << "All Unit Test OK!\n"; return 0; } ``` 编译测试:`g++ test_wc.cpp -o test.exe`,运行`test.exe` ## 三、README.md(作业要求a/b/c全部写好,直接放进仓库) ``` # wc 文本统计工具 ## 项目简介 本项目是一个C++实现的命令行文本统计程序,模仿Linux wc工具,读取纯英文txt文件,支持统计字符、单词、句子;扩展支持总行数、空行、单行注释行统计。 编译后生成 wc.exe,在cmd中使用命令:`wc.exe [参数] 文件名` ## 使用方法 ``` wc.exe [option] filename.txt -c 统计字符数 -w 统计单词数 -s 统计句子数 -l 统计全部行数 -e 统计空行数量 -m 统计//开头的纯注释行 ``` ## 文件列表说明 | 文件 | 说明 | | ---- | ---- | | wc.cpp | 主程序源码,核心统计逻辑 | | test_wc.cpp | 单元测试代码,包含多组测试用例 | | README.md | 项目说明文档 | | test*.txt | 自测用的测试文本(可选) | ## 运行示例 1. 统计字符: ``` > > wc.exe -c file.txt > 128 ``` 2. 统计单词: ``` > > wc.exe -w file.txt > 24 ``` 3. 统计句子: ``` > > wc.exe -s file.txt > 5 ``` 4. 扩展:统计空行 ``` > > wc.exe -e file.txt > 2 ``` ## 版本迭代说明(对应Gitee提交commit) - v0.1:空项目,初始化仓库,只上传README骨架 - v0.2:完成基础功能:-c -w -s,可统计字符、单词、句子 - v0.3:完成扩展加分功能:-l -e -m,增加单元测试 ## 性能测试说明(加分项 performance test) 使用VS/CLion内置性能分析工具,读取大文本文件,观测CPU耗时、内存占用;读取10MB英文文本,程序处理速度快,内存占用稳定。 ``` ``` ## 四、码云Gitee提交规划(严格按照作业3个版本commit) 1. **v0.1 空项目** commit message:`v0.1 init empty project` 仓库只有README.md(空白骨架) 2. **v0.2 基础功能完成** commit message:`v0.2 finish basic function: -c -w -s` 上传 wc.cpp + 更新README,基础参数可用,截图cmd运行 `-c -w -s` 3. **v0.3 扩展加分 + 单元测试** commit message:`v0.3 add extend function and unit test` 上传 test_wc.cpp,增加 `-l -e -m`,更新README,补充单元测试截图、扩展功能运行截图 > ✅ 每次commit之后,截图命令行运行结果,保存图片,写进README或者交作业时附上截图 ## 五、编译指令(Windows MinGW/g++) ```bash # 编译主程序 g++ wc.cpp -o wc.exe # 编译单元测试 g++ test_wc.cpp -o test.exe ``` ## 六、作业附加说明(交作业的时候写) - 交付物:Gitee仓库链接 - 如果是AI辅助完成:把这一段全部对话提示词一并粘贴上交 - 加分项清单: ✅ 扩展参数(代码行、空行、注释行) ✅ 多例单元测试 ✅ IDE性能测试(CLion/VS的profile工具)