一、Fork仓库地址
github地址 | git地址 |
结对伙伴 | 李虹霖 |
三、 计算模块接口的设计与实现过程
流程图
功能的实现及代码分析
ifstream fp("D://PPC//test.txt", ios::in);
int NUM = 0;
while (!fp.eof())
{
NUM++;
fp.getline(character, 100);
cout<<endl<<character<<' '<<strlen(character)<<endl;
if (strlen(character) > 0)
{
num_row++;
}
//num_ascii++;
for (int i = 0; i < strlen(character); i++)
{
if (isupper(character[i]))
{
character[i] = tolower(character[i]);
}
}//将文件中的大写字母转化为小写字母
/* for (int i = 0; i < strlen(character); i++)
{
if (character[i] >= 0 && character[i] <= 255)
{
if (character[i] == ' ')
{
length = length + 1;
}
else
{
length = 0;
}
if (length <= 1)
{
word[max] = character[i];
max++;
}
}*
}*/
for (int j = 0; j < strlen(character); j++)//文件中中一行的字符
{
if ((j==0||character[j]==' ') && character[j+1] >= 97 && character[j+1] <= 122)
{
if(j==0&&character[0] >= 97 && character[0] <= 122)
{
Num=1;
for (j1 = j + 1; j1 < j + 4; j1++)
{
if (character[j1] >= 97 && character[j1] <= 122)
Num++;
}
}
else if(character[j]==' '&&character[j+1] >= 97 && character[j+1] <= 122)
{
Num=0;
for (j1 = j + 1; j1 <= j + 4; j1++)
{
if (character[j1] >= 97 && character[j1] <= 122)
Num++;
}
}
if (Num == 4)
{
Sum++;
if(j==0)
{
for(j2=j;j2<strlen(character);j2++)
{
if(character[j2]==' ')
break;
word[max]=character[j2];
max++;
}
j=j2;
}
else
{
for(j2=j+1;j2<strlen(character);j2++)
{
if(character[j2]==' ')
break;
word[max]=character[j2];
max++;
}
j=j2;
}
}
word[max]=' ';
max=max+1;
//j = j1;
}
}
for (int i = 0; i < strlen(character); i++)
{
if (character[i] >= 0 && character[i] <= 255)
{
num_ascii++;
}
}
}
这是初期的代码,因为对于C++语法的不熟悉,所以在刚开始的时候没有想到使用vextor这个类来存储字符串,以至于前期遇到了阻碍,困扰了很多时间。最后还是李宏霖同学提出的建议,使用vextor这个类来存储文件的内容。
程序初期运行的结果:
改进之后的程序:
void WordText::GetFile(string path)
{
WordText text;
int num_word[200];
int Max = 0;
fp.open(path);
int k, j, max = 0;
int number = 0;
char zm[2000];
int num_blank[200], Num, min = 0;
int num = 0;
int num_row = 0;
//int num_word = 0;
vector<char> ch;
ch.push_back(' ');
char character[1000];
int length = 0;
int i;
while (!fp.eof())
{
fp.getline(character, 100);
length=text.Ascii_Num(character) + length;
if (strlen(character) > 0)
num_row++;
for (int i = 0; i < strlen(character); i++)//这段循环的作用是将从文件中读出的字符串中的大写字母转化为小写字母
{
if (isupper(character[i]))
{
character[i] = tolower(character[i]);
}
}
for (int i = 0; i < strlen(character); i++)//对vexter类进行写入操作
{
ch.push_back(character[i]);
}
ch.push_back(' ');
}
cout << "lines:" << num_row << endl;//输出有效行数
cout << "charactere: "<< length << endl;//输出Ascii码字符数
for (i = 0; i < ch.size(); i++)//判断单词的个数
{
if (i != (ch.size() - 1))
{
if (ch.at(i) == ' '&&ch.at(i + 1) >= 97 && ch.at(i + 1) <= 122)
{
num = 0;
for (j = i + 1; j <= i + 4; j++)
{
if (ch.at(j) >= 97 && ch.at(j) <= 122)
num++;
}
if (num == 4)
{
//num_word++;
for (j = i; j < ch.size(); j++)
{
if (j > i&&ch.at(j) == ' ')
break;
zm[max] = ch.at(j);
max++;
}
}
//i = j;
}
}
}
for (vector<char>::iterator iter = ch.begin(); iter != ch.end(); iter++)
{
if ((iter+1)!=ch.end()&&(*iter) == ' ' && (*(iter + 1) == ' '))
{
iter = ch.erase(iter);
iter--;
}
}
for (int i = 0; i < max; i++)
{
if (i != 0 && zm[i] == ' ')
{
num_blank[min] = i;
min++;
}
}
int SUM = 0;
for (i = 0; i < max; i++)
{
if (zm[i] == ' ')
{
SUM++;
}
}
cout << "words:" << SUM << endl;//输出单词的总数
Word_Hz(zm,max);//调用计算单词频数的函数
}
这是一个总的函数,为外部提供了一个借口。这是一个总的函数,里面实现了对文件的读取, 对文件内容中Ascii码字符数的统计,单词数量的计算,有效行数的统计,最后通过筛选,调用了 单词出现的频数的函数Word_Hz,实现了基本的功能。
代码运行结果:
判定为单词的字符:
四、代码规范
我们编写的代码涉及到了C和C++语言,所以参考的该博客介绍的编程规范
五、 代码互审
在编程的同时进行审查,及时解决了出现的问题。
六、性能测试
性能测试:
单元测试:
七、总结:
由于此次的作业难度较为困难,所以在课下花了很多的时间来学习与这次作业相关的知识。
但是还是很遗憾,有些功能没有完善出来。
由于我关于C++方面的知识掌握得不是很牢靠,所以前期的编码对于我来说较有难度,不过在之
后的不断学习中,自己对于C++的语法也有了进一步的掌握,编码的速度也就随之增快了,
自己也很幸运,能和李虹霖组队一起完成此次的结对编程作业.