23-单词数(HDU2070)

        单词数

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 61557    Accepted Submission(s): 15270


Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
 
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
 
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
 
Sample Input
you are my friend #
 
Sample Output
4
 
Author
Lily
 
Source
 
Recommend
linle   |   We have carefully selected several similar problems for you:  2074 2054 2052 1251 2024 
#include <bits/stdc++.h>
using namespace std;
set <string> myset;

int main(){
	string str;
	while(getline(cin, str)){
		myset.clear();
		if(str[0] == '#')
			break;
		int len = str.length();
		for(int i = 0; i < len; i++){
			string ss = "####################################################################################";
			int t = 0;
			while(str[i] != ' ' && i < len){
				ss[t++] = str[i++];
			}
			if(t)  //ss里面存了数据时才将ss插入到set 
				myset.insert(ss);
		}
		cout << myset.size() << endl;
	}
	return 0;
}

#include <iostream>
#include <sstream>
#include <set>
using namespace std;

int main(){
	set <string> myset; 
	string str, t;
	while(getline(cin, str) && str[0] != '#'){
//		stringstream ss(str);
		stringstream ss;
		ss.str(str);
		while(ss >> t){
			myset.insert(t);
		}
		cout << myset.size() << endl;
		myset.clear();
	}
	return 0;
} 

/*
本题有两个注意点:就是只有ss里面存了新数据才插入到set;另一个则是对于string类型的重载的+是用于字符串间的,不能将
字符直接相加,字符是只能是单个赋值,不能用+,但是当赋值时则需要要先保证字符串自身的长度,即需要初始化足够的长度才
能赋值,否则会越界的!!! 
/*
1."              "
0
2."  asdf as a"
3
3."  asdf     asdf  ds"
2
4."asdf   asdf    "
1
5.直接输回车
0
*/ 

  

原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/8628439.html