电子小字典

news/2024/10/30 23:17:01/

电子小字典

// @author: Folivora Li
// @copyright: Folivora Li/*24、【3】电子小字典(选做)(查找)
[问题描述]
利用键树结构,建立一个微型电子字典。
[基本要求]
实现生词的加入,单词的查找、删除,修改等操作。*/
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <fstream>
using namespace std;
typedef struct treenode {char letter;bool IsWord = false;string meaning;treenode* next[26];
}Treenode;
void ReadFile(map<string, string>& dict)
{string word;string meaning;fstream file;file.open("D:\\dictionary.txt", ios::in);if (file.fail()){cout << "error!" << endl;exit(1);}while (!file.eof()){file >> word;file >> meaning;dict.insert(pair<string, string>(word, meaning));}
}
Treenode* InitTree()
{Treenode* root = new Treenode;for (int i = 0; i < 26; i++){root->next[i] = NULL;}return root;
}
int MapLetterToNum(char letter)
{return int(letter) - 97;
}
void Memset(Treenode* next[26])
{for (int i = 0; i < 26; i++){next[i] = NULL;}
}
void Insert(Treenode*& root, string word, string meaning)
{Treenode* p = root;int i = 0;for (i = 0; i < word.length(); i++){if (p->next[MapLetterToNum(word[i])] == NULL){p->next[MapLetterToNum(word[i])] = new Treenode;Memset(p->next[MapLetterToNum(word[i])]->next);p->next[MapLetterToNum(word[i])]->letter = word[i];p = p->next[MapLetterToNum(word[i])];}else{p = p->next[MapLetterToNum(word[i])];}}p->IsWord = true;p->meaning = meaning;
}
void Search(Treenode*& root, string word)
{Treenode* p = root;int i = 0;for (i = 0; i < word.length(); i++){if (p->next[MapLetterToNum(word[i])] == NULL){cout << "查找的单词不存在!" << endl;return;}else{p = p->next[MapLetterToNum(word[i])];}}cout << word << ":";cout << p->meaning << endl;
}
bool IsHaveBranch(Treenode* root, int serial)
{for (int i = 0; i < 26; i++){if (i != serial){if (root->next[i] != NULL){return true;}}}return false;
}
bool Delete(Treenode*& root, string word)
{Treenode* p = root;vector<Treenode*> word_vec;vector<Treenode*>::iterator iter;int i = 0;for (i = 0; i < word.length(); i++){if (p->next[MapLetterToNum(word[i])] == NULL){cout << "查找的单词不存在!" << endl;return false;}else{p = p->next[MapLetterToNum(word[i])];word_vec.push_back(p);}}Treenode* pre = NULL;for (iter=word_vec.end() - 1; iter != word_vec.begin(); iter--){pre = *(iter - 1);pre->next[MapLetterToNum((*iter)->letter)] = NULL;if (IsHaveBranch(pre, MapLetterToNum((*iter)->letter))){break;}}return true;
}
void Modify(Treenode*& root)
{cout << "请输入要修改的单词:" << endl;string wrongword;cin >> wrongword;cin.ignore();cout << "请输入修改后的单词:" << endl;string rightword;cin >> rightword;cin.ignore();cout << "请输入释义:" << endl;string meaning;cin >> meaning;cin.ignore();if (Delete(root, wrongword) == true){Insert(root, rightword, meaning);}
}
int main()
{map<string, string> dict;ReadFile(dict);Treenode* root = (InitTree());map<string, string>::iterator iter;int i = 0;for (iter = dict.begin(); iter != dict.end(); iter++,i++){Insert(root, iter->first, iter->second);}Search(root, "zinc");Search(root, "abandon");//Delete(root, "abandon");Modify(root);Search(root, "abandon");Search(root, "aaqw");
}

http://www.ppmy.cn/news/276689.html

相关文章

C++实现电子词典(简单小程序)

电子词典&#xff1a;输入单词&#xff0c;显示单词的汉语翻译 思路分析&#xff1a;1.定义一个map<word,中文翻译> 对象 的map对象 2.下载英汉翻译文档&#xff0c;一行一行读取文档内信息&#xff0c;单词和中文翻译 3.读文件&#xff1a;获取单词&#xff0c;中文…

电子小字典(南航2022数据结构课程设计第十八题)

[问题描述] 利用键树结构&#xff0c;建立一个微型电子字典。 [基本要求] 实现生词的加入&#xff0c;单词的查找、删除&#xff0c;修改等操作。 [基本思路] 这道题的关键就是键树的操作&#xff0c;键树大概就是下图的样子&#xff0c;每个节点存一个字母&#xff0c;多…

字库在嵌入式系统使用

随着现代电子与信息技术的不断发展&#xff0c;信息处理产品的种类越来越多。常 见的涉及信息处理的软件产品和嵌入式系统包括&#xff1a;桌面操作系统&#xff08;Windows、Mac、Linux、Unix等&#xff09;、具有文字处理功能的软件&#xff08;Office、CAD、OA等&#xff09…

屏幕取词的原理

“鼠标屏幕取词”技术是在电子字典中得到广泛地应用的&#xff0c;如四通利方和金山词霸等软件&#xff0c;这个技术看似简单&#xff0c;其实在windows系统中实现却是非常复杂的&#xff0c;总的来说有两种实现方式&#xff1a; 第一种&#xff1a;采用截获对部分gdi的api调用…

嵌入式的应用领域

随着科技进步&#xff0c;嵌入式的出现&#xff0c;以及人们对生活质量&#xff0c;产品的智能化&#xff0c;成本的要求等&#xff0c;以及国家对与物联网、电子、科技的扶持&#xff0c;大量的电子产品都促使嵌入式的快速发展。使用嵌入式的产品如我们常用的手机、平板电脑、…

《2-数组》

数组 1.简介&#xff1a; 数组&#xff08;Array&#xff09;是一种固定长度的存储相同数据类型在连续内存空间中的数据结构 引出&#xff1a;[索引 &#xff08;Index&#xff09;]----元素在数组中的位置 2.初始化 写法&#xff1a;一般用到无初始值、给定初始值 在不给定…

拼多多笔试题(三):多多的电子字典

问题描述&#xff1a; 多多鸡打算造一本自己的电子字典&#xff0c;里面的所有单词都只由a和b组成。 每个单词的组成里a的数量不能超过N个且b的数量不能超过M个。 多多鸡的幸运数字是K&#xff0c;它打算把所有满足条件的单词里的字典序第K小的单词找出来&#xff0c;作为字典…

你觉得java与嵌入式学哪个好?

只要是现在选择嵌入式的学员&#xff0c;都是因为嵌入式未来发展好&#xff0c;薪资待遇好&#xff0c;那么java是不是也拥有这些特点呢&#xff1f;如果你还不了解这些的话&#xff0c;那么下面就要跟紧小编了&#xff0c;一起来了解下Java与嵌入式学哪个好吧。 点击获取1V1嵌…