第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc/
这个作业的目标 熟悉博客的写作和使用,将自己介绍给老师和助教
姓名-学号 裘立帆-2022329301114
Gitee地址 https://gitee.com/qiu-lifan/code.git

注:本文并不包含主函数,完整代码请移步Gitee

一、项目介绍

实现一个命令行文本计数统计程序。能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。 具体命令行界面要求如下: 命令模式:

wc.exe [参数] [文件名]

wc.exe -c file.txt 统计字符数

wc.exe -w file.txt 统计单词数

扩展功能(:统计代码行、空行、注释行等,并提供相应命令接口。

要求:

  1. 程序和参数名可以按个人喜好命名。项目文档应包含项目说明,写入README.MD。该说明应该包含:
  • 项目的简介及其相关的用法;

  • 文件列表及其相关说明;

  • 例程运行及其相关结果。

  1. 码云上传的项目要求必须通过多次提交(commit)体现各个版本更迭和运行结果截图。版本号分别为:
  • v0.1 空项目

  • v0.2 项目完成基础功能

  • v0.3 项目完成扩展功能

  1. 编写对应的单元测试

a. 实现基本功能的测试;

  • 单元测试包含更多的测试用例。(加分项)

  • 使用选用的IDE附带的工具进行performance test。(加分项)

  • 交作业时需直接附上自己的码云仓库地址。

二、使用说明

  • v0.1 空项目模式选择:为基本的C++程序
  • V0.2 基础功能模式选择:wc.exe -[参数] [文件名],参数,c为统计字符数, w为统计单词数, j为统计句子数,文件名,例如C:\file.txt
  • V0.3 扩展功能模式选择:wc.exe -[参数] [文件名],参数,c为统计字符数, w为统计单词数, j为统计句子数,z统计代码行数,x统计注释行数,v统 计空行数,文件名,例如C:\file.txt

三、文件列表及相关说明

  • text1.txt运行结果
  • text2.txt运行结果
  • V0.1 空项目;
  • V0.2 基础功能
  • V0.3 扩展功能
  • 性能测试
  • text1.txt
  • text2.txt

四、运行结果及单元测试

多个测试样例及代码迭代

  1. 基础代码
  • 统计字符数
void countCharacters(FILE *fp, int &charnum) {  
    char ch;  
    while ((ch = fgetc(fp)) != EOF) {  
        charnum++;  
    }  
} 
  • 统计单词数
void countWords(FILE *fp, int &wordnum) {  
    char ch;  
    bool inWord = false;  
    while ((ch = fgetc(fp)) != EOF) {  
        if (isspace(ch) || ch == '.' || ch == ',' || ch == '?' || ch == '!') {  
            if (inWord) {  
                wordnum++;  
                inWord = false;  
            }  
        } else {  
            inWord = true;  
        }  
    }  
    // Check if the last characters were part of a word  
    if (inWord) {  
        wordnum++;  
    }  
}  
  • 统计句子数
void countSentences(FILE *fp, int &linenum) {  
    char ch;  
    while ((ch = fgetc(fp)) != EOF) {  
        if (ch == '.' || ch == '?' || ch == '!') {  
            linenum++;  
        }  
    }  
}  
  
  1. 扩展代码
  • 统计代码行数
void countCodeLines(FILE* fp, int& codeLines) {
    char ch;
    bool inLine = false;
    while ((ch = fgetc(fp))!= EOF) {
        if (ch == '\n') {
            codeLines++;
            inLine = false;
        } else {
            inLine = true;
        }
    }
}
  • 统计注释行数
void countCommentLines(FILE* fp, int& commentLines) {
    char ch;
    bool inComment = false;
    while ((ch = fgetc(fp))!= EOF) {
        if (!inComment && ch == '/') {
            ch = fgetc(fp);
            if (ch == '/' || ch == '*') {
                inComment = true;
                commentLines++;
            }
        } else if (inComment && ch == '\n') {
            inComment = false;
        }
    }
}
  • 统计空行数
void countEmptyLines(FILE* fp, int& emptyLines) {
    char ch;
    bool wasNewLine = false;
    while ((ch = fgetc(fp))!= EOF) {
        if (ch == '\n') {
            if (wasNewLine) {
                emptyLines++;
            } else {
                wasNewLine = true;
            }
        } else {
            wasNewLine = false;
        }
    }
}
  1. text1.txt运行结果
  • v0.2基础功能

输入图片说明

  • v0.3扩展功能
    输入图片说明
  1. text2.txt运行结果
  • v0.2基础功能
    与记事本计数结果验证相同
  • v0.3扩展功能
    输入图片说明

五、性能测试

  1. CPU使用率
    输入图片说明
  2. GPU使用情况
    输入图片说明
  3. 事件
    输入图片说明

六、心得体会

通过这次项目,我收获颇丰。我不仅掌握了C++编程的基本技能,还学会了处理文本文件的方法,并能够统计字符数、单词数、句子数,以及实现拓展功能。同时,我也深刻体会到了项目管理、文档编写和版本控制的重要性。然而,在项目过程中,我也发现了一些不足之处。比如,在实现扩展功能时,我花费了较多的时间学习和调试代码,导致项目进度有所延误。这提醒我在未来的项目中要更加注重技术储备和计划安排,以提高项目效率和质量。总的来说,这次项目是一次非常有意义的经历,它不仅提升了我的编程技能,还让我更加深入地理解了软件开发的全过程。我相信这些经验和教训将对我未来的学习和工作产生积极的影响。最后,放一张去浙江科技大学拍的晚霞,来纪念作业的完结撒花!

posted @ 2024-10-28 22:28  那就这样釛  阅读(13)  评论(0编辑  收藏  举报