题目链接

思路
s t r i n g g e t l i n e ( c i n , w o r d ) c h a r [ ] 字典树的模板题,但要注意读入的问题。对于string类型的数据用getline(cin,word)。而对于char []型则 stringgetline(cin,word)char[]
使 c i n . g e t l i n e ( w o r d , ( n u m ) ) 使用cin.getline(word,(num))。具体分析可以参考下面的博客 使cin.getline(word,(num))
getline用法
个人认为这个代码模版比较好理解


#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <string>
using namespace std;
struct trie{
	trie *next[30];
	int num;
	trie(){ 构造函数
		for(int i=0;i<26;i++)
			next[i]=NULL;
		num=0;
	}
};
trie root;
void Insert(char word[]){
	trie* p=&root;
	for(int i=0;word[i];i++){
		if(p->next[word[i]-'a']==NULL)
			p->next[word[i]-'a']=new trie;
		p=p->next[word[i]-'a'];
		p->num++;
	}
}
int Find(char word[]){
	trie* p=&root;
	for(int i=0;word[i];i++){
		if(p->next[word[i]-'a']==NULL)
			return 0;
		p=p->next[word[i]-'a'];
	}
	return p->num;
}
int main(){
    char word[15];
    memset(word,'\0',sizeof(word));
    while(cin.getline(word,12)){
	if(strlen(word)==0) break;
	Insert(word);
	memset(word,'\0',sizeof(word));
    }
    while(~scanf("%s",word)){
	printf("%d\n",Find(word));
	memset(word,'\0',sizeof(word));
    }
    return 0;
}