题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2072

题目:

Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
解题思路:这道题的思路就是计数每一行不同单词的个数,由此想到set关联式容器(是一个集合,集合中元素具有不重复性),set是C++标准库中的一种关联容器。所谓关联容器就是通过键(key)来读取和修改元素。与map关联容器不同,它只是单纯键的集合。此题通过cin.get()函数来读取单个字符,每次读取单词的第一个字符,接下来循环读入字符保存在s字符串中,判断条件为当前字符不是空格和换行符;当不满足条件即输入完一个单词,这样通过s.length()来检查是否单词长度为0,不为0就可向容器中插入该单词,最后如果遇到'\n',即该组已经输入完毕,就得输出有多少个单词数了。
AC代码:
解法一:
 #include<bits/stdc++.h>
using namespace std;
int main()
{
set<string>st;//一个保存string的set集合
string s;
char c;
while((c=cin.get())!='#'){//循环读入单词的第一个字符,直到不为'#'为止,控制文章
s.clear();//清除要保存单词的s字符串
while(c!=' '&&c!='\n'){//循环读取字符(为一个单词)
s+=c;
c=cin.get();//获取下一个字符
}
if(s.length())//表示如果此时string中s是有长度,就将s插入到容器中
st.insert(s);
if(c=='\n'){//遇到'\n'的话就是该输出个数和换行了
cout<<st.size()<<endl;//输出容器的大小
st.clear();//清除st容器
}
}
return ;
}

解法二:(C语言写法)

 #include<bits/stdc++.h>
using namespace std;
char a[],b[][];//a数组要开大点,b数组用来保存每行的单词
int main()
{
int i,j,k,g,t;
while(gets(a)){
if(strcmp(a,"#")==)break;
memset(b,,sizeof(b));//清空
i=j=k=,g=strlen(a);
while(i<g){//扫描每行的字符串
if(a[i]==' '){
while(a[i]==' '&&a[i]!='\0')i++;//清空0字符
}
else{
while(a[i]!=' '&&a[i]!='\0'){
b[k][j]=a[i];//单个字符赋予二维数组
j++,i++;
}
b[k][j]='\0';//完整的字符串
k++,j=;//下一个单词
}
}
t=k;//表示总共有单词的个数
for(i=;i<k-;i++){//循环比较
for(j=i+;j<k;j++){
if(strcmp(b[i],b[j])==){
t--;//如果有相同的话t就减1
break;//跳出操作相当于删掉下标为i的单词,保留j位置的单词,因为后面还要用到j来与其后面的比较
}
}
}
cout<<t<<endl;//输出单词个数
}
return ;
}

题解报告:hdu 2072 单词数的更多相关文章

  1. HDU 2072 单词数

    题目链接  http://acm.hdu.edu.cn/showproblem.php?pid=2072 普通解法: /* HDU 2072 单词数 --- 字符串处理 */ #include < ...

  2. 题解 P1308 【统计单词数】

    小金羊发一篇不一样的题解: 这个题解不是讲解法的,是讲算法的... 众所周知,string在中被定义为是类型, 这意味着我们可以将它作为int一样的类型使用. 并且还有神奇的加减法: string s ...

  3. HDOJ.2072 单词数(map)

    单词数 点我挑战题目 点我一起学习STL-MAP 题意分析 给出一行单词,判断这行有不同种的单词多少个,用map可以轻松解决. 代码总览 /* Title:HDOJ.2072 Author:pengw ...

  4. HDOJ 2072 单词数

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

  5. HDU 2072(字符串的流式操作,学习了)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2072 单词数 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  6. 单词数 HDU 2072 字符串输入控制

    单词数 HDU 2072 字符串输入控制 题意 lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个 ...

  7. HDU 2072(单词数)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] “就是统计一篇文章里不同单词的总数”(已经是一句话了..) [题目分析] 明显需要去重,上set,因为按行分析,又没有EOLN用 ...

  8. 题解报告:hdu 1398 Square Coins(母函数或dp)

    Problem Description People in Silverland use square coins. Not only they have square shapes but also ...

  9. 题解报告:hdu 2069 Coin Change(暴力orDP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2069 Problem Description Suppose there are 5 types of ...

随机推荐

  1. [NPM] npm check to update the dependencies

    To update the dependencies in the project, we can run: npx npm-check -u

  2. python第四讲

    三元运算符: 三元运算又叫三目运算,是对简单的条件语句的缩写. 书写格式: n1 = 值1 if 条件 else 值2 # 如果条件成立,那么将 “值1” 赋值给n1变量,否则,将“值2”赋值给n1变 ...

  3. js 计算两个日期之间 相差几年几月几日

    1.计算日期差 Mine.vue <!-- 我的 --> <template> <div> <!-- 标题栏 --> <x-header :lef ...

  4. js获取get传递的值

    <script language="javascript" src="js/jquery-1.9.0.min.js"></script> ...

  5. smartfoxserver扩展里面过滤聊天的不合法字符

    http://blog.csdn.net/yc7369/article/details/35567105 近期做手游客户要求加上一个聊天功能.事实上嘛,个人认为这个聊天功能比較鸡肋,这部分差点儿已经有 ...

  6. SQL Server中一些有用的日期sql语句

    SQL Server中一些有用的日期sql语句 1.一个月第一天的 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 2.本周的星期一 SELECT DA ...

  7. 错误 1 无法将程序集“NBear.Data.dll”复制到文件“D:\newbpm\bpm\SureBpm\Bin\NBear.Data.dll”。无法将“D:\newbpm\bpm\SureSoft.WebServiceBaseLib\bin\Debug\NBear.Data.dll”添加到网站。 无法添加文件“Bin\NBear.Data.dll”。 拒绝访问。 D:\..

    错误 1 无法将程序集“NBear.Data.dll”复制到文件“D:\newbpm\bpm\SureBpm\Bin\NBear.Data.dll”.无法将“D:\newbpm\bpm\SureSof ...

  8. 大学生程序设计邀请赛(华东师范大学)B. 分词 DP

    B. 分词   有一句句子因为粘贴的时候出现了一点问题空格全部丢失了.现在给一本字典,每个词都对应这个词出现的频率(每十亿).根据这个频率,我们可以根据下面的公式算出这个词带来的收益 P(word): ...

  9. github相关

    1 某次release的源码 某次release的源码在release列表中,不在branch中,tag和release是在一起的.所以,下载某个release的源码应该去release中找,而不应该 ...

  10. 记录下docker的常用命令

    常用命令: docker images:查看本地所有镜像 docker pull  centos:7:从仓库中获取镜像 docker ps:列出所有正在运行的容器 docker ps -a:列出所有容 ...