基于不同策略的英文单词的词频统计和检索系统(C++)

基于不同策略的英文单词的词频统计和检索系统。在这个系统中,我们使用了两种不同的数据结构,分别是哈希表和二叉搜索树。

1. 类设计

class WordFrequencySystem {
private:
    // 哈希表策略
    std::unordered_map<std::string, int> hashTable;

    // 二叉搜索树策略
    std::map<std::string, int> binarySearchTree;

public:
    // 插入单词
    void insertWord(const std::string& word);

    // 获取单词的词频
    int getWordFrequency(const std::string& word, const std::string& strategy);

    // 获取所有单词及其词频
    void getAllWordsAndFrequency(const std::string& strategy);
};

2. 插入单词操作

void WordFrequencySystem::insertWord(const std::string& word) {
    // 在哈希表中插入
    hashTable[word]++;

    // 在二叉搜索树中插入
    binarySearchTree[word]++;
}

这个操作用于将给定的单词插入到哈希表和二叉搜索树中,并更新词频。

3. 获取单词词频操作

int WordFrequencySystem::getWordFrequency(const std::string& word, const std::string& strategy) {
    // 根据策略选择相应的数据结构
    std::map<std::string, int>* selectedStructure;
    if (strategy == "hash") {
        selectedStructure = &hashTable;
    } else if (strategy == "bst") {
        selectedStructure = &binarySearchTree;
    } else {
        std::cerr << "Invalid strategy!" << std::endl;
        return -1;
    }

    // 查找词频
    auto it = selectedStructure->find(word);
    if (it != selectedStructure->end()) {
        return it->second;
    } else {
        return 0;
    }
}

这个操作允许用户根据选择的策略从哈希表或二叉搜索树中检索指定单词的词频。

4. 获取所有单词及其词频操作

void WordFrequencySystem::getAllWordsAndFrequency(const std::string& strategy) {
    // 根据策略选择相应的数据结构
    std::map<std::string, int>* selectedStructure;
    if (strategy == "hash") {
        selectedStructure = &hashTable;
    } else if (strategy == "bst") {
        selectedStructure = &binarySearchTree;
    } else {
        std::cerr << "Invalid strategy!" << std::endl;
        return;
    }

    // 打印所有单词及其词频
    for (const auto& pair : *selectedStructure) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
}

这个操作用于打印所有单词及其词频,根据选择的策略使用哈希表或二叉搜索树。

5. 主函数

int main() {
    WordFrequencySystem wordSystem;

    // 示例文本
    std::string text = "This is a sample text. This text is used for testing the word frequency system. ";

    // 将文本分割成单词并插入系统
    std::vector<std::string> words;
    std::string word;
    for (char c : text) {
        if (std::isalnum(c)) {
            word += std::tolower(c);
        } else if (!word.empty()) {
            wordSystem.insertWord(word);
            word.clear();
        }
    }

    // 统计使用哈希表策略的单词词频
    std::cout << "Word frequencies using hash table strategy:" << std::endl;
    wordSystem.getAllWordsAndFrequency("hash");

    // 统计使用二叉搜索树策略的单词词频
    std::cout << "\nWord frequencies using binary search tree strategy:" << std::endl;
    wordSystem.getAllWordsAndFrequency("bst");

    // 检索单词词频
    std::string searchWord;
    std::cout << "\nEnter a word to retrieve its frequency: ";
    std::cin >> searchWord;

    int hashFrequency = wordSystem.getWordFrequency(searchWord, "hash");
    int bstFrequency = wordSystem.getWordFrequency(searchWord, "bst");

    std::cout << "\nFrequency of '" << searchWord << "' using hash table strategy: " << hashFrequency << std::endl;
    std::cout << "Frequency of '" << searchWord << "' using binary search tree strategy: " << bstFrequency << std::endl;

    return 0;
}

这个主函数演示了如何使用系统,将示例文本分割成单词并插入系统,然后统计并输出使用不同策略的单词词频,最后根据用户输入检索指定单词的词频。

这个例子是一个基本框架,你可以根据实际需求扩展系统的功能,优化性能,并增加错误处理等功能。

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/468345/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 组合数问题 社论

    组合数问题给 (n,p,k,r),求 [\sum_{i=0}^{\infty}\dbinom{nk}{ik+r} ] 对 (p) 取模的结果 .(1 \leq n \leq 10^…

    数据结构和算法 2023年6月7日
    081
  • Excel文件校验

    工作中,经常存在excel文件的导入导出的相关工作,因此正确的文件格式校验成为必须。不合适的文件校验方式会导致非法文件跳过校验,从而产生不必要的麻烦。比如,通过文件后缀名的方式进行…

    数据结构和算法 2023年6月8日
    095
  • SpringMVC笔记

    SpringMVC 一、SpringMVC介绍 1.什么是MVC 是一种软件架构的思想,将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的JavaBean,作用…

    数据结构和算法 2023年6月7日
    080
  • Mysql 主从同步原理简析

    在开始讲述原理的情况下,我们先来做个知识汇总,究竟什么是主从,为什么要搞主从,可以怎么实现主从,mysql主从同步的原理1、什么是主从其实主从这个概念非常简单主机就是我们平常主要用…

    数据结构和算法 2023年6月8日
    0101
  • 977.有序数组的平方

    给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums = [-4,-1,0,3,10]输出…

    数据结构和算法 2023年6月8日
    076
  • B. Navigation System【CF 1320】

    传送门 题目:简单理解就是,我们需要开车从s点到t点。车上有一个导航,如果当前点为x,则导航会自动为你提供一条从x到t的最短的路线(如果有多条,则随机选一条),每走到下一个点则会实…

    数据结构和算法 2023年6月7日
    0101
  • CF1468A LaIS 题解

    首先可以写出这样一个方程 [dp_i=\max_{j 其中,(w(i,j)=0/1) 表示 ([i+1,j-1]) 有没有比 (a_i) 和 (a_j) 都大的数。 考虑维护每个点…

    数据结构和算法 2023年6月12日
    072
  • C++ IO流_数据的旅行之路

    1. 前言 程序中的数据总是在流动着,既然是流动就会有方向。数据从程序的外部流到程序内部,称为输入;数据从程序内部流到外部称为输出。 C++提供有相应的 API实现程序和外部数据之…

    数据结构和算法 2023年6月7日
    065
  • 关于 MyBatis-Plus 分页查询的探讨 → count 都为 0 了,为什么还要查询记录?

    开心一刻 记得上初中,中午午休的时候,我和哥们躲在厕所里吸烟 听见外面有人进来,哥们猛吸一口,就把烟甩了 进来的是教导主任,问:你们干嘛呢? 哥们鼻孔里一边冒着白烟一边说:我在生气…

    数据结构和算法 2023年6月7日
    087
  • 数论-整除+欧几里得+扩展欧几里得

    一、整除的概念 定义:a,b是两个任意整数,b≠0,若存在整数q,使得a=b*q,则称 a能够被b整除,也称b能整除a,也称b是a的因数,也称a为b的倍数。用记号b|a表示。 整除…

    数据结构和算法 2023年6月7日
    073
  • AtCoder Beginner Contest 252

    Ex K-th Beautiful Necklace 题意 有 N 个石头,每个石头有不同的颜色和价值颜色一共有 C 种,每种颜色至少存在一个石头可以选择一些石头串成一条项链,项链…

    数据结构和算法 2023年6月12日
    059
  • 蓝桥杯2018年国赛试题解题报告

    x星球的钞票的面额只有:100元,5元,2元,1元,共4种。小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱。小明有点强迫症,他坚持要求200元…

    数据结构和算法 2023年6月12日
    098
  • 建造者模式(创建型)

    建造者模式 介绍 建造者模式注重的是部件构建的过程,意在 通过一步一步地精确构造出一个复杂的对象。 可以将建造者模式理解为,假设我们有一个对象需要建立,这个对象是由多个组件(Com…

    数据结构和算法 2023年6月8日
    090
  • K 蹦蹦炸弹(大模拟) 哈理工程序设计竞赛

    题目: ​ 出题人在(x)轴上放置了(n)个正在移动的炸弹,第(i)个炸弹的初始位置为(x[i]),速度为(v[i]),当两颗炸弹相遇时会发生爆炸,导致这两颗炸弹消失。在经历了(1…

    数据结构和算法 2023年6月12日
    083
  • 算法:队列的最大值

    问题 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队…

    数据结构和算法 2023年6月12日
    091
  • P4017 最大食物链计数(拓扑排序)

    题目传送门:https://www.luogu.com.cn/problem/P4017 代码: 1 #include 2 #include 3 #include 4 #inclu…

    数据结构和算法 2023年6月8日
    098
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球