能帮忙改一个查找单词的小程序吗题目:设集合S由若干单词(英文)组成,给定字符串K,在S中查找与K最佳匹配的结果.最佳匹配的结果定义为:与K有最长共同前缀的字符串.使用文件保存初始
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/25 17:37:49
![能帮忙改一个查找单词的小程序吗题目:设集合S由若干单词(英文)组成,给定字符串K,在S中查找与K最佳匹配的结果.最佳匹配的结果定义为:与K有最长共同前缀的字符串.使用文件保存初始](/uploads/image/z/8554379-59-9.jpg?t=%E8%83%BD%E5%B8%AE%E5%BF%99%E6%94%B9%E4%B8%80%E4%B8%AA%E6%9F%A5%E6%89%BE%E5%8D%95%E8%AF%8D%E7%9A%84%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%90%97%E9%A2%98%E7%9B%AE%EF%BC%9A%E8%AE%BE%E9%9B%86%E5%90%88S%E7%94%B1%E8%8B%A5%E5%B9%B2%E5%8D%95%E8%AF%8D%EF%BC%88%E8%8B%B1%E6%96%87%EF%BC%89%E7%BB%84%E6%88%90%2C%E7%BB%99%E5%AE%9A%E5%AD%97%E7%AC%A6%E4%B8%B2K%2C%E5%9C%A8S%E4%B8%AD%E6%9F%A5%E6%89%BE%E4%B8%8EK%E6%9C%80%E4%BD%B3%E5%8C%B9%E9%85%8D%E7%9A%84%E7%BB%93%E6%9E%9C.%E6%9C%80%E4%BD%B3%E5%8C%B9%E9%85%8D%E7%9A%84%E7%BB%93%E6%9E%9C%E5%AE%9A%E4%B9%89%E4%B8%BA%EF%BC%9A%E4%B8%8EK%E6%9C%89%E6%9C%80%E9%95%BF%E5%85%B1%E5%90%8C%E5%89%8D%E7%BC%80%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2.%E4%BD%BF%E7%94%A8%E6%96%87%E4%BB%B6%E4%BF%9D%E5%AD%98%E5%88%9D%E5%A7%8B)
能帮忙改一个查找单词的小程序吗题目:设集合S由若干单词(英文)组成,给定字符串K,在S中查找与K最佳匹配的结果.最佳匹配的结果定义为:与K有最长共同前缀的字符串.使用文件保存初始
能帮忙改一个查找单词的小程序吗
题目:设集合S由若干单词(英文)组成,给定字符串K,在S中查找与K最佳匹配的结果.最佳匹配的结果定义为:与K有最长共同前缀的字符串.使用文件保存初始的单词数据(至少100个),以逗号分隔.例:S={abc, bdef, zhen, zhao, abdd},K1=zhao,K2=abdf,K3=cheng,则与K1最匹配的结果是zhao,与K2最匹配的结果是abdd,与K3最匹配的结果是ε(空串).
#include
#include
const int sonnum=26;
struct TrieNode{ //结点结构体
int num; //到达该节点出的前缀个数
bool beach; //若是beach为true
struct TrieNode *son[sonnum]; //子节点指针
};
TrieNode *NewTrie(){ //创建新节点
TrieNode *newtrie=new TrieNode; //定义新结点
newtrie->num=1; //初始化当前单词个数只本身
newtrie->beach=false; //初始化为叶子节点,不存在子节点
for(int i=0;ison[i]=NULL;
return newtrie;
}
void Insert(TrieNode *tte,char *s,int len){ // 在TrieTree中插入新单词,TrieTree是根结点、
TrieNode *node=tte; //定义新结点指针作为当期结点指针指向根节点
for(int i=0;ison[s[i]-'a']==NULL) //如果子节点为空 (跟结点不存放字母)
node->son[s[i]-'a']=NewTrie();
else node->son[s[i]-'a']->num++;//非空)到达该节点的单词个数加一
node=node->son[s[i]-'a']; //当前节点指向下一个字母节点
}
node->beach=true; //最后一个结点设置为叶子节点
}
void Find(TrieNode *tte,char *s,int len){ //查找单词
TrieNode *node=tte; //定义新结点指针
cout
能帮忙改一个查找单词的小程序吗题目:设集合S由若干单词(英文)组成,给定字符串K,在S中查找与K最佳匹配的结果.最佳匹配的结果定义为:与K有最长共同前缀的字符串.使用文件保存初始
错误很多啊,cin的用法不对,安全处理不好,最重要的是查找逻辑的问题
都改了,测试成功.
#include
#include
#include
const int sonnum=26;
struct TrieNode{ //结点结构体
\x05int num; //到达该节点出的前缀个数
\x05bool beach; //若是beach为true
\x05struct TrieNode *son[sonnum]; //子节点指针
};
TrieNode *NewTrie(){ //创建新节点
\x05TrieNode *newtrie=new TrieNode; //定义新结点
\x05newtrie->num=1; //初始化当前单词个数只本身
\x05newtrie->beach=false; //初始化为叶子节点,不存在子节点
\x05for(int i=0;ison[i]=NULL;
\x05return newtrie;
}
void Insert(TrieNode *tte,char *s,int len){ // 在TrieTree中插入新单词,TrieTree是根结点、
\x05if(len==0) return;
\x05TrieNode *node=tte; //定义新结点指针作为当期结点指针指向根节点
\x05for(int i=0;ison[s[i]-'a']==NULL) //如果子节点为空 (跟结点不存放字母)
\x05\x05\x05node->son[s[i]-'a']=NewTrie();
\x05\x05else node->son[s[i]-'a']->num++;//非空)到达该节点的单词个数加一
\x05\x05node=node->son[s[i]-'a']; //当前节点指向下一个字母节点
\x05}
\x05node->beach=true; //最后一个结点设置为叶子节点
}
void Find(TrieNode *tte,char *s,int len){ //查找单词
\x05
\x05TrieNode *node=tte; //定义新结点指针
\x05cout