2. 要求

(1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。 附加要求:读入一段文本文件,统计该文本文件中单词的频率。

(2). 性能分析:

4. 作业提示

(1). 定义

  • 字母: A-Z, a-z.
  • 字母数字: A-Z, a-z, 0-9.
  • 分隔符: 字母数字
  • 单词:
  • 包含有4个4个以上的字母
  • 单词分隔符分开
  • 如果一个字符串包含_非_字母数字,则不是单词
  • 单词大小写不敏感,例如 “file”、“FILE”和“File”可以看作同一个单词
  • 单词必须是字母开头,“file123”是单词,“123file”不是单词

(2). 示例

输入

Word is case insensitive, i.e. “file”, “FILE” and “File” are considered the same word.

输出

word: 2
case: 1
insensitive: 1
file: 3
considered: 1
same: 1



预计至少一个下午做完,做起来才发现真的是无从下手……实际上做了八个小时左右。分析要在程序中逐步加入大写改小写、删除非字幕字符、确定字符长度大于等于4、单词频率统计四个程序块。
#include <iostream>
#include <vector>
#include <algorithm> 
#include <string>
#include <fstream>
using namespace std;

struct WORD
{
    string word;
    int num;
};

vector<WORD> a;  //创建vector对象,a[]

int&value(const string&s)
{
    for(int i=0;i<a.size();i++)
        if(s==a[i].word)
            return a[i].num;
        WORD p;
        p.word=s;
        p.num=0;
        a.push_back(p);  //在数组a最后添加数据
        return a[a.size()-1].num;
}

int main()
{
    string str;
    cout << "输入字符串:\n";
    char c;
    while(c=cin.get())
    {
        if(c>='a' && c<='z' || c>='A' && c<='Z' || c==' ' || c=='\n')  
            str+=c;   //去除符号
        if(c=='\n')
            break;
    }
//输出去掉非英文字符的字符串
    
    
    for(int j=0;str[j]!='\0';j++)
    {
        if(str[j]>='A'&&str[j]<='Z')
        {
            str[j]+= 32;  //大写字母Ascll码+32转换为小写
        }
    }
 //输出转换为小写的字符串

    string buf;
    ofstream fout("D:\123.txt");  //把转换好的字符串写入文件
    fout<<str;
    fout.close ();
    ifstream fin("D:\123.txt");  //读出写入的字符串并排序
    while(fin>>buf)
    value(buf)++;
    vector<WORD>::const_iterator p;  //迭代器访问元素
    for(p=a.begin();p!=a.end();++p)
        cout<<p->word<<":"<<p->num<<'\n';    
    return 0;
}

本来想直接读入字符串文件在进行大小写改写和删除字符的程序,但是一直不能运行成功,就改成了手动输入字符串。

然后把改好大小写和删除好字符的字符串用Ofstream写入了原来的文件后再进行频率统计。虽然麻烦了点,但是也算是运行出来了……

做完这个之后发现成绩出来了……最后剩下的框定单词长度的一步就没做急急忙忙准备交作业……

 

运行结果:

 

这两次作业让我知道了如何用输入输出的方式打开文件。巩固了之前C++学到的大小写转换,学习了如何去掉字符以及简单的词频统计程序。作业中没有做出来的单词长度回头还需要进一步研究。

新学到了vector的用法:

C++ vector用法 - 金河 - 博客园

http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html

 

 



posted on 2016-03-16 19:13  陈晖丶  阅读(200)  评论(2编辑  收藏  举报