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 |
|
关于 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;
}