HDU2072 单词数【水题】

Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。

Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。

Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。

Sample Input
you are my friend #

Sample Output
4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#include <iostream>
#include<sstream>
#include<set>
using namespace std;

int main()
{
string s;
//!! set<string> words;
while(getline(cin, s) && s != "#") {
istringstream sin(s);
string w;
set<string> words;
while(sin>>w){
words.insert(w);
// cout<<w<<" ";

}
cout<<words.size()<<endl;

}}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

#include <cstdio>
#include <cstring>
#include <iostream>
#include <set>
#include <string>

using namespace std;

int main(void)
{
char buf[1024];
char pound[] = "#";
char delim[] = " ";
char *p;

set<string> words;

while(gets(buf) != NULL) {
if(strcmp(buf, pound) == 0)
break;

words.clear();

p = strtok(buf, delim);
while(p) {
words.insert(p);
p = strtok(NULL, delim);
}
cout << words.size() << endl;
}

return 0;
}

关于 strtok

调用方式 : char strtok(char str1, char *str2);
说明 : strtok()函数的原型在string.h中
功能说明:函数strtok()返回字符串str1中指向一个由str2所指定的字符或者字符串的分隔符的指 针,当没有要返回的分隔符时,就返回一个空指针。

函数strtok()实际上修改了有str1指向的字符串。每次找到一个分隔符后,一个空(NULL)就被放到分隔符处,函数用这种方法来连续查找该字符串。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string.h>
#include <stdio.h>

int main()
{
char *p;
char str[100]="This is a test ,and you can use it";
p = strtok(str," "); // 注意,此时得到的 p为指向字符串:"This",即在第一个分隔 符前面的字符串,即每次找到一个分隔符后,一个空(NULL)就被放到分隔符处,所以此时NULL指针指向后面的字符串:"is a test ,and you can use it"。

printf("%s\n",p); // 此时显示:This

do
{
p = strtok(NULL, ","); // NULL 即为上面返回的指针,即字符串:
// "is a test ,and you can use it"。
if(p)
printf("|%s",p);
}while(p);

system("pause");
return 0;
}