BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #38025同步于 2010/4/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

一个语法问题,困扰了一个上午

kmplayer
2010/4/16镜像同步2 回复
一个trie树的简单应用. 先在此谢谢啦. #include <iostream> #include <fstream> #include <vector> #include <string> using namespace std ; class trie { private : int sum; trie* next[26]; public : trie():sum(0) { for(int i=0;i<26;i++) next[i]=NULL; } ~trie () { int i ; for ( i = 0 ; i < 26 ; i++ ) { delete next[i] ; } } void insert(string& str) { trie* tmp=this; for(int i=0;i<str.size();i++) { str[i]|=0x20; tmp=tmp->next[str[i]-'a']; if(tmp==NULL) { tmp=new trie; } else tmp->sum++; } } int quary ( string& str ) { trie* tmp=this; int n=0; for(int i=0;i<str.size();i++) { str[i]|=0x20; tmp=tmp->next[str[i]-'a']; //这里tmp为什么总是NULL??????? n++; if(tmp->sum==0) //导致这里出现段错误 break; } return n; } }; int main () { string word; trie t; word=string("abcd"); t.insert(word); t.quary(word); return 0 ; }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
wolf5x机器人#1 · 2010/4/16
这样改 void insert(string& str) { trie* tmp=this; for(int i=0;i<str.size();i++) { str[i]|=0x20; if(tmp->next[str[i]-'a']==NULL) //你原来的代码压根没修改next[key] { tmp->next[str[i]-'a']=new trie; } tmp = tmp->next[str[i]-'a']; tmp->sum++; } } int quary ( string& str ) { trie* tmp=this; int n=0; for(int i=0;i<str.size();i++) { printf("%d ",i); str[i]|=0x20; //这里要先判断有没有对应 key 的儿子 if(tmp->next[str[i]-'a'] == NULL){ //没这个词, 终止查询 } tmp=tmp->next[str[i]-'a']; n++; if(tmp->sum==0) break; } return n; }
kmplayer机器人#2 · 2010/4/16
哦,明白了. 谢谢,非常感谢. 【 在 wolf5x 的大作中提到: 】 : 这样改 : void insert(string& str) : { : ...................