菜鸟学习c++—map使用练习 实现词频统计程序

原创 2015年07月11日 09:51:16

c++练习,使用map实现词频统计程序。

程序实现两个功能:(1)统计文本中各个单词的出现次数 (2)查找指定输入单词在文本中是否出现

需注意:练习比较随意,多使用全局变量,正式使用形参实参传递参数比较好。

#include <iostream>

#include <fstream>
#include <vector>
#include <map>
using namespace std;
ifstream is;
vector<string> text;
map<string, size_t> word_count;
int main()
{
    string line;
    char choice;
    void create_vector_map(string line);               /* 完成分词工作,将文本变为单个单词存入map函数 */
    int search(string word);                                   /* 查询功能实现函数  */
    void open_file(ifstream &is);
    void print_vector_map();
    void result_1();
    open_file(is);                                                 /* 打开文本 */
    create_vector_map(line);
    cout<<"      1.show passage"<<endl;
    cout<<"     ----------------"<<endl;
    cout<<"      2.search word    "<<endl;
    cout<<endl;
    cout<<"enter your option:"<<endl;
    cin>>choice;
    
    if(choice!='1' && choice!='2')
        cout<<"error!"<<endl;
    else
        switch (choice) {
            case '1':
                print_vector_map();
                break;
            case '2':
                result_1();
                break;
        }
    
}
void create_vector_map(string line)
{
    while(is)
    {
        
        string unit;
        while(getline(is,line))
        {
            auto beg=line.begin();
            auto end=line.end();
            auto star=beg;
            text.push_back(line);
            while(beg!=end+1)
            {
                while(*beg>='a'&&*beg<='z')
                {
                    ++beg;
                }
                unit.assign(star,beg);
                ++beg;
                star=beg;
                   ++word_count[unit];
            }
         
        }
    }
    cout<<"finish create task"<<endl;
}


int search(string word)
{
    int clu;
    auto beg=word_count.begin();
    auto end=word_count.end();
for (const auto &w : word_count)
{
    if (w.first!=word && beg!=end)
         {
             beg++;
        
    }
}
    if(beg==end)
        clu=0;
    else
        clu=1;
    return clu;
    
}
void open_file(ifstream &is)
{
    is.open("output.txt");                      /* 在project文件夹中建立output.txt存放分析文本*/
    if(is)
        cout<<"file open success!"<<endl;
    else
        cout<<"file open faild!"<<endl;
}


void print_vector_map()
{
    auto beg=text.begin();
    auto end=text.end();
    while(beg!=end)
    {
        cout<<*beg++<<endl;
    }
    for (const auto &w : word_count)
        cout<<w.first<<" occurs "<<w.second<<((w.second>1)?" times":" time")<<endl;
}


void result_1()
{
    string word;
    int clu;
    cout<<"please enter word you want to find(press p to exit):"<<endl;
    while(1)
    {
        cin>>word;
        if(word=="p")
            break;
        clu=search(word);
        if(clu==1)
            cout<<word<<" exit in output.txt"<<endl;
        else
            cout<<word<<" not exit in output.txt"<<endl;
    }
    cout<<"exit success"<<endl;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

菜鸟学习c++—实现系统权限管理功能(类的public和private应用)

面向对象语言中类的3大特征之一—封装 的意义在于实现隐藏类的具体细节。但是为什么要把类的属性设置为private,而把类的成员函数置为public呢? 我的理解是为了提高安全性,防止用户随意修改类对...

Java实现词频统计(Wordcount)-Map或Hashtable的value排序

我们在文本操作时,经常需要用到词频统计,并对统计后的词频进行排序,然后输出。 以下是我写的一个供大家参考:import java.io.BufferedReader; import java.io....

词频统计程序(C语言/C++)

#include #include #include #define N 50 typedef struct BiTNode { char data[N]; int count;...

菜鸟的《Linux程序设计》学习—shell script

1. 认识shell script shell script是利用shell的功能缩写的一个“程序”,这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式,管道...

菜鸟的学习之路(2) —java 运算符、语句和简单理解面向对象程序设计

运算符优先级列表 优先级 运算符 结合性 1 () [] . 从左到右 2 ! +(正) -(负) ~ ++ -- 从右向左 3 * / %...

软件工程-关于词频统计程序设计实现分析

需求: 写一个程序,读取一个30kb-300kb文本文件,统计其中词语的个数,并对其中高频词汇进行统计分析。

字典树应用——词频统计 (C++实现)

有幸能够来邮电交流学习一年 真的h

c++程序设计 谭浩强编 菜鸟学习笔记(一)

本人交大在读研二狗,以前几乎没有任何编程经验
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)