这个学期刚刚开始,我们有很多专业课,其中就有一门非常重要的科目——软件工程,这次是软件工程第一个个人小程序,是分析一个英文文章各个单词出现的频率,然后把其中频率最高的10个单词输出,我的编程能力不是太好,所以断断续续用了多半天才完成这个程序。
我感觉这个程序的难点是查找每个单词出现的频率,从文章开始一个一个字符来查,满足a-z或者A-Z都可以。还有就是要读取文件,代码如下:
ifstream in("english.txt"); //打开文件
string temp;
string str;
int count=0;
int j=0;
完成读取操作后就要查找单词的出现频率了,采用计数来判断英文字符和标点符号和数字的区别,如果是英文字符计数加一,如果是非英文字符计数终止。然后再判断单词,如果判定的英文字符都一样,则为同一个单词,然后计数加一。代码如下:
//按行读取文件,对每行信息截取单词并计数
while(getline(in,temp))
{
for(int
i=0;i<temp.length ();i++)
{
if((temp[i]>='a'&&temp[i]<='z')||(temp[i]>='A'&&temp[i]<='Z'))
count++; //如果是英文字符,则计数加1
else
if(count) //单词遇非英文字符时,计数终止,截取单词
{
str=temp.substr (i-count,count);
if(v.size
()) //若向量的长度不为0,则将单词与已有单词比较
{
for(j=0;j<v.size ();j++)
if(str.compare(v[j].word )==0)
{
v[j].num
++; //单词相同,则将相应单词的数目加1
count=0; //计数变量重新赋值为0,以便记录新的单词
break;
}
}
if(j>=v.size ())
{
tempstr.word = str;
tempstr.num =1;
v.push_back (tempstr);
count = 0; //单词添加完毕,计数变量归0,记录新单词
}
}
}
}
最后就是输出单词频率,代码如下:
for(int i=0;i<v.size ();i++)
cout<<"the word is:"<<v[i].word<<", the times is:"<<v[i].num<<endl;
return 0;
}
完整代码如下:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
//定义存储单词和出现次数的结构体
typedef struct{
string word;
int num;
}
count;
int main()
{
vector<count> v;
count
tempstr;
tempstr.num=0;
ifstream in("english.txt");
string temp;
string str;
//临时变量,存储单个单词
int count=0;
int j=0;
//按行读取文件,对每行信息截取单词并计数
while(getline(in,temp))
{
for(int
i=0;i<temp.length ();i++)
{
if((temp[i]>='a'&&temp[i]<='z')||(temp[i]>='A'&&temp[i]<='Z'))
count++; //如果是英文字符,则计数加1
else
if(count) //单词遇非英文字符时,计数终止,截取单词
{
str=temp.substr
(i-count,count);
if(v.size ())
//若向量的长度不为0,则将单词与已有单词比较
{
for(j=0;j<v.size ();j++)
if(str.compare(v[j].word )==0)
{
v[j].num ++; //单词相同,则将相应单词的数目加1
count=0; //计数变量重新赋值为0,以便记录新的单词
break;
}
}
if(j>=v.size ()) //单词第一次出现,将其添加至向量中
{
tempstr.word = str;
tempstr.num =1;
v.push_back (tempstr);
count = 0; //单词添加完毕,计数变量归0,记录新单词
}
}
}
}
//打印单词及出现次数
for(int i=0;i<v.size ();i++)
cout<<"the word is:"<<v[i].word<<", the times is:"<<v[i].num<<endl;
return 0; }
时间安排: 周活动总结表
姓名:付亚飞 日期:2014年3月2日
日期/任务 听课 查阅资料 编写程序 编写博客 时间总计
周四 100 100
周五 30 30 20 80
周六 20 30 50
反思总结:
这个程序不是特别难,我是用C++编写的,程序没有实现很多的功能,只是实现了基础的功能。通过这次实践我认识到自己还有很多的不足,对程序细节没有足够重视,一条语句能够出现很多的错误,感觉自己的编程能力存在很大的不足。在编写程序时遇到过很多的难题,我请教了其他的同学,上网查询了相关的知识,在以后几次团队项目中我会弥补自己的不足。