单词数 HDU 2072 字符串输入控制
单词数 HDU 2072 字符串输入控制
题意
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
解题思路
我的是使用map来进行统计的,确实比较慢了一些,因为输入的问题代码也写的比较垃圾。之后看了网上的题解,代码写得让人拍案叫绝。下面两个代码就是从这个博客上看到的
//方法一:使用gets全部读入,然后使用strtok函数进行分割,最后使用set容器来进行去重。
//代码进行了一下修改。
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
char buf[1024], delim[]=" ", *p;
set<string> w;
int main()
{
while(gets(buf)!=NULL) //gets函数在正常情况下会返回与参数相同的指针,在错误的情况下返回NULL
{
if(strcmp(buf, "#")==0)
break;
w.clear();
p=strtok(buf, delim);
while(p)
{
w.insert(p);
p=strtok(NULL, delim);
}
printf("%d\n", w.size());
}
return 0;
}
/* HDU2072 单词数 */
#include <iostream>
#include <cstdio>
#include <sstream> //这个包含istringstream,ostringstream,stringstream三个函数
#include <set>
using namespace std;
int main()
{
string s;
while(getline(cin, s) && s != "#") {
stringstream sin(s);
set<string> words;
string w;
while(sin >> w)
words.insert(w);
cout << words.size() << endl;
}
return 0;
}
另外附上自己的比赛时写的小代码。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
const int maxn=1e5+7;
map<string, int> mp;
char str[maxn];
char a[maxn];
int main()
{
int ans=0, i, len;
char tmp;
while(gets(str)&& str[0]!='#')
{
ans=0;
mp.clear();
len=0;
while( sscanf(str+len, "%s", a)!=EOF)
{
if(mp[a]==0)
{
mp[a]=1;
ans++;
}
len+=strlen(a)-1;
for(int i=1; ; i++)
{
if(*(str+len+i)!=' ')
{
len=len+i;
break;
}
}
}
printf("%d\n", ans);
}
return 0;
}
单词数 HDU 2072 字符串输入控制的更多相关文章
- 题解报告:hdu 2072 单词数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2072 题目: Problem Description lily的好朋友xiaoou333最近很空,他想 ...
- HDU 2072 单词数
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2072 普通解法: /* HDU 2072 单词数 --- 字符串处理 */ #include < ...
- HDU 2072(字符串的流式操作,学习了)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2072 单词数 Time Limit: 1000/1000 MS (Java/Others) Me ...
- hdu 2072 单词数(字符串)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2072 题意 每行输入由小写字母和空格组成,统计每行中不同的单词数. 题解 题解一 比较简洁的解法,读入 ...
- HDU 2072(单词数)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] “就是统计一篇文章里不同单词的总数”(已经是一句话了..) [题目分析] 明显需要去重,上set,因为按行分析,又没有EOLN用 ...
- 翻译器DIY它———算在英文文本中的单词数,字符和行数
咳咳.这部分应该是序列化编译器DIY的,然而,在这样做DIY第一次使用前flex 为了练练手,对于后者的理解是有帮助. 在word 我经常看到一个字计数功能,因此,它是如何实现,当然,首先想到的是要经 ...
- HDU 2072 单词数 详细解答
题目 单词数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- WordCount--统计输入文件的字符数、行数、单词数(java)--初级功能
码云地址: https://gitee.com/YuRenDaZ/WordCount 个人PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 180 ...
- 1185: 零起点学算法92——单词数(C)
一.题目 http://acm.wust.edu.cn/problem.php?id=1185&soj=0 二.分析 统计的是不同的单词数,即重复的单词只统计一次: 多组输入: 每行不超过10 ...
随机推荐
- 【NOIP2017提高组模拟12.17】环
题目 小A有一个环,环上有n个正整数.他有特殊的能力,能将环切成k段,每段包含一个或者多个数字.对于一个切分方案,小A将以如下方式计算优美程度: 首先对于每一段,求出他们的数字和.然后对于每段的和,求 ...
- 【leetcode】1210. Minimum Moves to Reach Target with Rotations
题目如下: In an n*n grid, there is a snake that spans 2 cells and starts moving from the top left corner ...
- hdu_3466(01背包)
其实,就是让C商品的q不等于p,其他都相同,这时,你就会发现如果要买C商品的话,肯定得先买C商品,因为买C商品的代价最大.所以,我们可以按照qi-pi的顺序来确定大顺序.这里我们还可以用更严谨的方式来 ...
- 【转】Python Schema一种优雅的数据验证方式
转自 https://segmentfault.com/a/1190000011777230 Schema是什么? 不管我们做什么应用,只要和用户输入打交道,就有一个原则--永远不要相信用户的输入数据 ...
- mysql 5.7 安装配置及无法启动的问题解决
(用这篇配置就能正常配置成功) mysql 免安装版配置方法: https://www.jb51.net/article/134452.htm 参考:https://blog.csdn.net/qq_ ...
- sensu
https://blog.csdn.net/enweitech/article/details/53763324
- Python 使用PyQt5进行开发(一)
Qt 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器. 我们先简单使用Qt进行一个小工 ...
- collection:指定要遍历的集合
//查询员工id'在给定集合中(1,6)的 public List<Employee> getEmpsByConditionForeach(@Param("ids")L ...
- -----------------解决天天模拟器不能连接adb命令
cmd------输入adb connect 127.0.0.1:6555即可 查询日志:adb shell "logcat |grep OkHttp"
- Ubuntu C/C++的编译环境
Ubuntu缺省情况下,并没有提供C/C++的编译环境,因此还需要手动安装.但是如果单独安装gcc以及g++比较麻烦,幸运的是,Ubuntu提供了一个build-essential软件包.查看该软件包 ...