软件工程第一个个人小程序

时间:2021-06-05 12:30:35

     这个学期刚刚开始,我们有很多专业课,其中就有一门非常重要的科目——软件工程,这次是软件工程第一个个人小程序,是分析一个英文文章各个单词出现的频率,然后把其中频率最高的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++编写的,程序没有实现很多的功能,只是实现了基础的功能。通过这次实践我认识到自己还有很多的不足,对程序细节没有足够重视,一条语句能够出现很多的错误,感觉自己的编程能力存在很大的不足。在编写程序时遇到过很多的难题,我请教了其他的同学,上网查询了相关的知识,在以后几次团队项目中我会弥补自己的不足。