HDU - 2072 单词数 trie树(非指针版) 统计不同单词数 || set

HDU - 2072 单词数

 

一开始以为每个单词后都有一个空格,想得太简单了。在一些细节上总是出错,找了半天。。。

几组测试数据:

1.              
2.  asdf as a
3.   asdf     asdf  ds
2
4.asdf   asdf    
#include
#include
#include
#include
using namespace std;
const int maxn = 1e6+10;
int tr[100010][30];
int tot,ans;
bool v[100010];  //标记节点为单词
char s[maxn],str[50];
void insert()
{
    int len = strlen(str);
    int root = 0;   //根节点编号为0
    for(int i=0;i='a' && s[i]<='z')
            {
                str[k++] = s[i];
            }
            if(s[i]==' ' || i==n-1)
            {
                if(str[0]=='\0')   //跳过连续的空格   否则会统计上
                    continue;
                if(!flag && str[0]!='\0')  //第一个单词不可能有重复的  直接插入
                {
                    ans++;
                    flag = 1;
                }
                else if(flag)  //从第二个单词开始需要检验是否存在相同单词
                {
                    if(!find())   //不存在相同单词
                        ans++;
                }
                //cout<

 

在讨论区看到了一种简单的写法

istringstream是C++里面的一种输入输出控制类,它可以创建一个对象,然后这个对象就可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。

#include
#include
#include
#include
#include  //istringstream 的头文件
using namespace std;
char s[100010];
int main()
{
    while(gets(s) && s[0]!='#')
    {
        string str = s;
        istringstream str1(str);
        set se;
        while(str1>>str)
            se.insert(str);
        printf("%d\n",se.size());
    }
    return 0;
}

 

你可能感兴趣的:(数据结构-----Trie树,STL)