能帮忙改一个查找单词的小程序吗题目:设集合S由若干单词(英文)组成,给定字符串K,在S中查找与K最佳匹配的结果.最佳匹配的结果定义为:与K有最长共同前缀的字符串.使用文件保存初始
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/25 01:34:25
能帮忙改一个查找单词的小程序吗题目:设集合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