第二次作业
这个作业属于哪个课程 | 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 统计单词数
扩展功能(:统计代码行、空行、注释行等,并提供相应命令接口。
要求:
- 程序和参数名可以按个人喜好命名。项目文档应包含项目说明,写入README.MD。该说明应该包含:
-
项目的简介及其相关的用法;
-
文件列表及其相关说明;
-
例程运行及其相关结果。
- 码云上传的项目要求必须通过多次提交(commit)体现各个版本更迭和运行结果截图。版本号分别为:
-
v0.1 空项目
-
v0.2 项目完成基础功能
-
v0.3 项目完成扩展功能
- 编写对应的单元测试
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
四、运行结果及单元测试
多个测试样例及代码迭代
- 基础代码
- 统计字符数
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++;
}
}
}
- 扩展代码
- 统计代码行数
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;
}
}
}
- text1.txt运行结果
- v0.2基础功能
- v0.3扩展功能
- text2.txt运行结果
- v0.2基础功能
- v0.3扩展功能
五、性能测试
- CPU使用率
- GPU使用情况
- 事件
六、心得体会
通过这次项目,我收获颇丰。我不仅掌握了C++编程的基本技能,还学会了处理文本文件的方法,并能够统计字符数、单词数、句子数,以及实现拓展功能。同时,我也深刻体会到了项目管理、文档编写和版本控制的重要性。然而,在项目过程中,我也发现了一些不足之处。比如,在实现扩展功能时,我花费了较多的时间学习和调试代码,导致项目进度有所延误。这提醒我在未来的项目中要更加注重技术储备和计划安排,以提高项目效率和质量。总的来说,这次项目是一次非常有意义的经历,它不仅提升了我的编程技能,还让我更加深入地理解了软件开发的全过程。我相信这些经验和教训将对我未来的学习和工作产生积极的影响。最后,放一张去浙江科技大学拍的晚霞,来纪念作业的完结撒花!