前言(迭代于2023/6/18)
大一下学期期末数据结构项目设计-哈夫曼编码压缩文本,目前这个项目仍有缺陷,不能正常地输出中文字符参与哈夫曼编码压缩文本运算;
需求文档:


注意事项
读取文本文件时会发生打不开问题:

这是因为打开的Txt文本的路径中带有了中文所以读取不了;
功能2-5中的显示:
Space -- 指代空格
LF -- 指代换行符

功能6中的读取注意事项:



功能6的哈夫曼编码表的书写规则如下:
空格 00;

代码部分:
#include <iostream> #include <queue> #include <unordered_map> #include <string> #include <fstream> #include <windows.h> #include <commdlg.h> #include <conio.h> using namespace std; //----------------------------------------------------------------------------------------------------------------------------- //全局变量 int key;//控制整体key事件 string text;//用于读取文本和哈夫曼压缩文本 string line; int cnt = 0;//用于读取文本的字符数 unordered_map<string, char> codes; // 储存哈夫曼编码表//用于功能6 // 结点类 class Node { public: char ch; // 字符 int freq; // 字符出现频率 Node* left; // 左孩子 Node* right; // 右孩子 Node() {} Node(char c, int f) { ch = c; freq = f; left = nullptr; right = nullptr; } ~Node() { delete left; delete right; } }; //----------------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------------- //函数区域 void menu();//打印选项菜单 void menuone();//打印次级选项菜单 void KeyEvent();//总体的选项事件 int readInfo();//使用者自主选择读入一段文本; void readInfoHand();//读取一个Txt文本(但是目前只开发了英文和标点符号的) // 建立哈夫曼树 Node* buildHuffmanTree(unordered_map<char, int>& freqMap); // 哈夫曼编码哈希表 void buildHuffmanCode(Node* root, string code, unordered_map<char, string>& huffmanCode); // 哈夫曼编码压缩 string compress(string text, unordered_map<char, string>& huffmanCode); // 哈夫曼解码,返回原始文本 string decompress(string compressedText, Node* root); void Hafuman();//哈夫曼编码压缩主体函数 void gotoxy(int x, int y);//光标定位 void changeColors();//改变控制台颜色函数 void HafumanYasuoShuchu();//哈夫曼编码压缩文本输出 void HafumanYasuoNumberShuchu();//哈夫曼编码的数量排序 void HafumanYasuoBianmaShuchu();//哈夫曼编码的展示 int getCompressedLength(const string& text, const unordered_map<char, string>& huffmanCode);//统计压缩后的字符数位数 int readInfoBiao();//用于功能6,读取哈夫曼编码表 int readInfoWenben();//用于功能6,读取哈夫曼压缩后的文本 void Jiema();//功能6,解码的函数汇总 //---------------------------------------------------------------------------------------------------------------------------- int main() { changeColors(); while (1) { menu(); KeyEvent(); if (key == 27)break; system("pause"); system("cls"); //清屏 } system("cls"); //清屏 return 0; } void KeyEvent() { key = _getch(); switch (key) { case 27: system("cls"); cout << "------退出中------" << endl; system("pause");

这是一个使用C++编程的大一下学期数据结构课程的期末项目,实现了哈夫曼编码来压缩文本。程序可以读取文本,计算字符频率,建立哈夫曼树,并进行编码和解码。目前存在的问题是无法处理包含中文字符的文本。
最低0.47元/天 解锁文章
4590





