# 第二次作业 **Repository Path**: Gggffxu/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-26 - **Last Updated**: 2026-10-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 命令行文本计数程序 使用 C++17 编写,输入 ASCII 纯英文文本,支持字符数、单词数和句子数统计。 ## 编译及用法 ```powershell g++ -std=c++17 -O2 -Wall -Wextra main.cpp counter.cpp -o wc.exe g++ -std=c++17 -O2 -Wall -Wextra tests.cpp counter.cpp -o tests.exe .\tests.exe .\wc.exe -c -w -s sample.txt ``` 字符包含空格、标点、制表符和换行字节;CRLF 计两个字符。单词为连续英文字母,字母之间的撇号属于同一个单词,连字符分隔单词,数字不计单词。连续的 `.?!` 计一句;没有终止标点的片段不计句子。不进行缩写、小数等自然语言判断。非 ASCII 文件会报错。 sample.txt 内容为 `Hello world!`,不含末尾换行。结果:characters: 12、words: 2、sentences: 1。 ## 文件列表 - main.cpp:命令行参数、文件读取与错误处理。 - counter.h / counter.cpp:计数接口和实现。 - tests.cpp:基本单元测试。 - sample.txt:运行样例。 ## 版本 - v0.1:空项目。 - v0.2:基本统计功能与基本单元测试。 ## 扩展功能 v0.3 ```powershell .\wc.exe --help .\wc.exe -l -b -n counter.cpp .\wc.exe -a sample.txt powershell -ExecutionPolicy Bypass -File .\build.ps1 ``` `-l` 代码行,`-b` 空行,`-n` 注释行,`-a` 所有统计项。参数可组合,最后一个参数必须是文件名,带空格的路径需加双引号。退出码:0成功、1文件或编码错误、2参数错误。 扩展行统计针对常见 C/C++ 风格文本,支持 `//`、跨行 `/* */`,忽略普通字符串和字符字面量中的注释符号。每个物理行只计入一类:纯空白行计空行;含代码(包括混合注释)的行计代码行;其余纯注释行计注释行。空文件为0行,末尾换行不产生额外一行。块注释内部的纯空白行计空行。未闭合块注释持续到文件末尾。未实现C++原始字符串、预处理行拼接和嵌套注释,不作为完整C++语法分析器使用。 新增文件:tests.cpp包含25个单元测试,test_cli.ps1包含8个命令行集成测试,build.ps1一键编译与测试,benchmark.cpp用于独立计时,evidence目录保存真实运行日志,AI_PROMPTS.md记录本次任务用户提示词。 `sample.txt`执行`-a`的预期结果: ```text characters: 12 words: 2 sentences: 1 code_lines: 1 blank_lines: 0 comment_lines: 0 ``` v0.3完成扩展行统计、更多测试用例与计时程序。使用`git log --oneline --decorate`查看真实提交记录。Git提交身份为本地占位身份Assignment Author,上传前可自行配置后续提交身份。 ## 性能验证 ```powershell g++ -std=c++17 -O2 benchmark.cpp counter.cpp -o benchmark.exe .\benchmark.exe ``` 时间复杂度O(N),当前文件一次性读入内存,因此空间复杂度O(N)。计时用固定4600000字节样本,重复10次,结果见evidence/benchmark.txt。该结果是独立计时,不是IDE性能分析报告。 已使用 **Code::Blocks 25.03 官方发行版附带的 Code Profiler** 完成性能分析。该工具是 GNU gprof 的 IDE 图形界面,见[官方用户手册](https://www.codeblocks.org/docs/main_codeblocks_en3.html)的 Code profiler 一节。 操作过程:通过`profile.ps1`编译带采样支持的基准程序并收集500轮数据,在Code::Blocks打开`word-counter.cbp`,选择`Profile`目标,执行`Plugins → Code profiler`,查看Flat Profile,并通过`Export to File`导出结果。 ```powershell powershell -NoProfile -ExecutionPolicy Bypass -File .\profile.ps1 -Iterations 500 ``` 本次输入每轮4600000字节,500轮墙钟耗时8461.41毫秒,校验值2800000000;采样显示`count_text`调用500次,占采样时间95.47%,自身CPU采样时间7.16秒。具体环境、范围、解释和复现方法见[性能分析报告](PERFORMANCE.md)。这轮测量只覆盖内存中的计数函数,不包括文件读取和命令行启动;采样带有额外开销,不代表普通发布版的端到端速度。 ![IDE自带Code Profiler菜单](evidence/performance/ide-profiler-menu.jpg) ![IDE性能分析结果](evidence/performance/ide-flat-profile.jpg) 新增文件:`word-counter.cbp`为IDE性能工程,`profile.ps1`为采样构建及数据采集脚本,`PERFORMANCE.md`为分析报告,`evidence/performance/ide-export.txt`为IDE原生导出文本,`raw-profile.zip`保留匹配的程序和原始采样数据,其他文件保存采样输出、工具版本及截图。后续性能分析补充提交不改动v0.1至v0.3标签。 ## 码云提交与截图 压缩包中的repository.bundle保留所有历史,可在解压后的目录执行: ```powershell git clone repository.bundle submission cd submission git remote remove origin git remote add origin https://gitee.com/你的用户名/你的仓库名.git git push -u origin master git push origin --tags ``` 请使用自己的仓库地址并通过Git凭据提示登录,勿把密码或令牌写入代码。新建远程仓库时不初始化README,以免与本地历史冲突。 本项目已上传到 https://gitee.com/Gggffxu/second-assignment ,v0.1、v0.2、v0.3标签和对应提交均已保留。 evidence中的`v0.1-run.txt`验证空项目;`v0.2-run.txt`是从v0.2标签重新编译后的实际结果;`v0.3-run.txt`保存扩展功能、25个单元测试、8个命令行测试及计时输出。截图是这些真实日志在记事本中显示时的界面截图,原始文字日志可逐项核对,并非终端现场截图。计时因运行负载不同而变化,不同次运行的计时值可不同。 ![v0.1空项目验证](evidence/v0.1-screenshot.png) ![v0.2基础功能验证](evidence/v0.2-screenshot.png) ![v0.3扩展功能与测试](evidence/v0.3-screenshot.png) 本次截图和文档整理通过后续提交补充,未改写或移动原始版本标签。 ## AI使用说明 本项目的代码和文档由AI生成并在本机编译测试。AI_PROMPTS.md记录当前任务可见的用户提示词;若后续继续使用AI修改,应追加对话提示词。提交者应理解代码、核对结果,并按课程要求附上完整相关对话。