第二次作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zjlg/rjjc |
| 作业目标 | 实现一个命令行文本计数统计程序 |
| 姓名+学号 | 沈烨斌 2022329301116 |
详细代码请移步至gitee网站我的主页“第二次作业”(https://gitee.com/shen-yebin/second-assignment)
一、项目简介及操作过程
1. 项目简介
该项目旨在实现一个命令行文本计数统计程序。
基础功能:能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。
拓展功能:能正确统计导入的txt文本中的代码行,空白行,注释行。
具体命令行界面要求举例:
命令模式: wc.exe + [参数] [文件名]
以下为示例:
wc.exe -c file.txt 统计字符数
wc.exe -w file.txt 统计单词数
wc.exe -l file.txt 统计句子数
wc.exe -h file.txt 统计代码行
wc.exe -k file.txt 统计空白行
wc.exe -z file.txt 统计注释行
其中,"wc"为应用程序的名称,"-c""-w""-s"等为命令参数,"file"为txt文件的名称。
2. 操作过程
-
2.1 首先在E盘新建文本文件,文本文件名为“text”,输入文本,并保存
-
2.2 在编译软件Dev-C++上编写代码,运行,命名程序名(代码在后面附上)
-
2.3 通过快捷键“win+r”,输入cmd,打开运行界面
-
2.4 在运行界面输入程序路径,再输入文本路径,最后根据需要输入
“wc.exe -? E:\text.txt” (“?”处为想要搜索的方面)
并按回车进行计数工作(如:输入c进行字符数计数,输入w进行单词数计数等)
(在输入路径时,记得一定要把文件后缀名带上)
二、三次文件的代码和实验情况
1.E:\软件技术基础B\text.txt ,空程序
2.E:\软件技术基础B\v2.0项目完成基础功能\v2.0程序本体.exe ,项目完成基础功能
-
2.1 wc.exe -c E:\text.txt ,统计字符数
-
2.2 wc.exe -w E:\text.txt ,统计单词数
-
2.3 wc.exe -l E:\text.txt ,统计句子数
-
2.4 基础功能的代码
点击查看代码
if(s[1]=='c')
{
string g;
cin>>g;
if((fp=fopen((g).c_str(),"r"))==NULL) //读取文件内容
{
cout<<"error"<<endl;
}
ch=fgetc(fp);
while(ch!=EOF)
{
a++;
ch=fgetc(fp);
}
fclose(fp);
cout<<"字符数为:"<<a<<endl;
}
else if(s[1]=='w')
{
string g;
cin>>g;
if((fp=fopen((g).c_str(),"r"))==NULL) //读取文件内容
{
cout<<"error"<<endl;
}
ch=fgetc(fp);
while(ch!=EOF)
{
if(ch==' '||ch==','||ch=='\n'||ch=='\0'||ch=='.'||ch=='!'||ch=='?')
{
b++;
}
ch=fgetc(fp);
}
fclose(fp);
cout<<"单词数为:"<<b<<endl;
}
else if(s[1]=='l')
{
string g;
cin>>g;
if((fp=fopen((g).c_str(),"r"))==NULL) //读取文件内容
{
cout<<"error"<<endl;
}
ch=fgetc(fp);
while(ch!=EOF)
{
if(ch=='?'||ch=='!'||ch=='.')
{
c++;
}
ch=fgetc(fp);
}
fclose(fp);
cout<<"句子数为:"<<c<<endl;
}
3.E:\软件技术基础B\v3.0项目完成拓展功能\v3.0程序本体.exe ,项目完成扩展功能
-
3.1 wc.exe -h E:\text.txt, 统计行数
-
3.2 wc.exe -k E:\text.txt, 统计空行数
-
3.3 wc.exe -z E:\text.txt, 统计注释行数
-
3.4 拓展功能的代码
点击查看代码
else if(s[1]=='h')
{
string g;
cin>>g;
if((fp=fopen((g).c_str(),"r"))==NULL) //读取文件内容
{
cout<<"error"<<endl;
}
ch=fgetc(fp);
while(ch!=EOF)
{
if(ch=='\n')
{
d++;
}
ch=fgetc(fp);
}
fclose(fp);
cout<<"行数为:"<<d<<endl;
}
else if(s[1]=='k')
{
string g;
cin>>g;
if((fp=fopen((g).c_str(),"r"))==NULL) //读取文件内容
{
cout<<"error"<<endl;
}
ch=fgetc(fp);
while(ch!=EOF)
{
if(ch=='\n')
{
ch=fgetc(fp);
if(ch=='\n')
{
e++;
}
}
ch=fgetc(fp);
}
fclose(fp);
cout<<"空行数为:"<<e<<endl;
}
else if(s[1]=='z')
{
string g;
cin>>g;
if((fp=fopen((g).c_str(),"r"))==NULL) //读取文件内容
{
cout<<"error"<<endl;
}
ch=fgetc(fp);
while(ch!=EOF)
{
if(ch=='/')
{
ch=fgetc(fp);
if(ch=='/')
{
f++;
}
}
ch=fgetc(fp);
}
fclose(fp);
cout<<"注释行数为:"<<f<<endl;
}
三、实验感悟
这个实验是我第一次以另一种方式来打开一个文件和程序,在整个过程中,我遇到了非常多的问题,和室友也进行了长时间的交流,路径的试错、代码的优化,我们一起讨论了好几个小时。同时,这也是我们第一次使用gitee这个网站,在这个网站上有很多的开源项目和讨论可以供我们这些初学者学习研究,但说实话在上面要上传一个文件挺复杂的。最重要的是,这个实验让我对C++编程语言及其相关拓展库有了深入的理解,我能够简单地对一个文本文件进行统计字符数、单词数、句子数等功能,虽然只学到点皮毛,但也算是拓宽了我的知识面,收获颇丰。