首页 > 代码库 > hdu 2072 单词数,set,strtok

hdu 2072 单词数,set,strtok

STL_set操作:

st.begin()

返回指向第一个元素额迭代器

st.end()

返回指向末尾元素的迭代器

st.rbegin()

返回逆向迭代器,指向链表末尾

st.rend()

返回指向开头之前位置的迭代器

st.clear()

清空迭代器

st.count(key_type key)

返回某个值元素的个数

st.empty()

如果为空,返回true

st.size()

返回元素的数量

st.swap()

交换两个集合变量

st.insert(val)

st.insert(loc, val)

st.insert(start, end);

插入val元素,并返回指向该元素的迭代器和一个布尔值来说明val是否成功的被插入了。

在迭代器loc前插入val,并返回一个指向该元素的迭代器;

将迭代器start开始到end结束返回内的元素插入到集合中;

st.erase(loc)

st.erase(start,end)

st.erase(key_type key)

删除loc所指元素

删除[start,end)之间的元素

删除key值为value的元素,并返回删除的个数

st.find(key_type key)

返回一个迭代器指向键值为key的元素,未找到返回end()

pair<iterator start, iterator end> equal_range(const key_type &key)

查找键值等于key的元素区间为[start, end),指示范围的两个迭代器以pair返回

st.lower_bound(key_type key)

st.upper_bound(key_type key)

返回一个迭代器指向>=key的第一个元素

返回一个迭代器,指向>key的第一个元素


strtok函数

#include <string.h>

char *strtok( char *str1, constchar *str2 );

功能:函数返回字符串str1中紧接“标记”的部分的指针,字符串str2是作为标记的分隔符。如果分隔标记没有找到,函数返回NULL。为了将字符串转换成标记,第一次调用str1指向作为标记的分隔符。之后所以的调用str1都应为NULL。

int main() {
char str[] = "smart,calm,luck";
char *p; p = strtok(str, ",");
while(p){   
printf("%s\n", p);   
p = strtok(NULL, ",");   
}
return 0;
}
运行结果:
smart
calm
luck


题意:

统计一篇文章里不同单词的总数。


Sample Input
you are my friend

you are my friend you are my friend
#

Sample Output
4

4


#include <cstdio>
#include <cstring>
#include <set>
#include <string>
#include <iostream>
using namespace std;

set<string> dict;

int main()
{
    char str[10000];
    string s;
    while(gets(str)){
        if(str[0]=='#') break;
        dict.clear();
        char *p; p = strtok(str," ");
        while(p){
            s = p;
            dict.insert(s);
            p = strtok(NULL," ");
        }
        printf("%d\n", dict.size());
    }
    return 0;
}


hdu 2072 单词数,set,strtok