就是一道Trie树,但是一晚上没过,最后发现原因是初始化的问题
#include <iostream> #include<cstring> #include<string> #include<cstdlib> using namespace std; struct Node { int num; Node* next['z'-'a'+1]; Node():num(0){ for(int i=0; i < sizeof(next)/sizeof(*next); i++){ next[i]=NULL; }/*这里的初始化为NULL很重要啊,一直a不了就是因为这*/ } }node; void insert(string s) { int slen = s.length(); Node* t = &node; for(int i = 0; i<slen;i++) { int id = s[i] -'a'; if(t->next[id] == NULL) t->next[id] = new Node; t = t->next[id]; t->num++; } } int find(string s) { int slen = s.length(); Node* t = &node; for(int i = 0; i<slen;i++) { int id = s[i] -'a'; t = t->next[id]; if(t == NULL)return 0; } return t->num; } int main() { string s; while(getline(cin,s)) { if(s.length() == 0) break; insert(s); } while(getline(cin,s)) { if(s.length() == 0) break; cout<<find(s)<<endl; } return 0; }