ACM菜鸟刷题——HDU 2072 统计不同的单词个数

先上题(摘录)

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

题意很简单,即统计一句话中不同单词的个数(以空格隔开)

上AC代码

#include<iostream>
#include<cstdio>
#include<sstream>
#include<set>
using namespace std;
int main()
{
	string s;
	while(getline(cin,s)&&s!="#")
	{
		istringstream sin(s);//改变输出流
		set<string>ss;
		string w;//新设立一个string类w来放s
		while(sin>>w)
		ss.insert(w);//将w中不同的元素插入到集合ss中
		
		cout<<ss.size()<<endl;
		
	 } 
}

确实 ,看了博客上其它大佬们的题解,这是到水题。

但对俺这种啥都不懂的菜鸟来说不是啊~(不是说看不懂,而是那些语句从没接触过不知道用途)

①istringstream sin(s); 对于一个没接触过多少字符串流的人来说懵了
网上的解释是:

定义一专个字符串输入流的对象属sin,并调用sin的复制构造函数,将s中所包含的字符串放入sin 对象中

说实话没明白在讲啥,不就是复制粘贴吗?
后来的一个解释才懂了

istringstream sin(s) 这句将s数据转换成为输入流,这样,sin就象cin一样的使用了,只是输入数据来源于s中的数据。

为啥所有的教程解释就不能像这句一样通俗易懂一点(哭
也就是说这样定义了以后,你就获得了一个自动输入的“cin”,而且输入的内容已经被你给规定好了(应该是这个意思吧)

②set< string >ss
我做本题前只知道有stl库这个说法,但其实根本没用过里面的东西。这里是定义了一个string类型的“集合”(上过高中的应该都学过),为什么不定义一个数组,就是看重了本题要统计没有重复出现过的单词的个数,正好与集合的概念相吻合。

③string w;//新设立一个string类w来放s
说实话俺还是没太懂为什么一定要再定义一个新的string类w先把原s的内容输进去之后,再把w的元素不重复地插入到集合之中(不能只设一个string一步到头吗?)其实看代码是有一点懂得但是说不太出来为什么(不这样做是错的,每次输出都是1),不知道有没有人能解答一下。

更新:
④getline(cin,s)&&s!="#"

注意getline()接受的是参数是一个输入流和一个string类型的字符串,而cin.getline()接受的则是一个字符数组,在这里只能用getline()

以及停止标记符上要用双引号,不能用单引号

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值