单词数 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 ...
随机推荐
- C++ std::vector 总结笔记
Initialization #include<iostream> #include<vector> using namespace std; int main() { vec ...
- python接口自动化三(登录绕开验证码及发帖)
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 但是这里需要明确 ...
- springCloud——Dalston.SR5升级到Greenwich.SR2
老项目: SpringBoot 版本 :1.5.13.RELEASE SpringCloud 版本:Dalston.SR5 项目升级: SpringBoot 版本 :2.1.6.RELEASE Spr ...
- 【shell】sed指定追加模式空间的次数
最近遇到一个文本复制的场景,需要把文本的每一行都重复输出三次. 这个用awk或者sed实现都还是很简单的. sed代码: [root]$ seq | sed '{h;G;G}' 现在的问题是,如果每行 ...
- SpringCloud学习系列-Eureka服务注册与发现(2)
构建 microservicecloud-eureka-7001 eureka服务注册中心Module 1.新建microservicecloud-eureka-7001 2.pom <proj ...
- mysql 特殊符号
1.完全等于 <=> mysql> select null <=> null; +---------------+ | null <=> null | +-- ...
- 关于:基于http协议大文件断点续传上传至web服务器
关键部分 前端用file.slice()分块 前端用FileReader获取每一分块的md5值 后端用MultipartFile接受分块文件 后端用FileOutputStream拼装分块文件 话不多 ...
- Debian Buster升级后找不到声卡
昨天将Debian从Stretch升级到了新版巴斯光年(Buster).仍旧是先将source.list中的stretch替换为buster,再执行apt-get的update.upgrade.dis ...
- [CF11D]A Simple Task 题解
题解 我们从最简单的思路开始考虑,首先看到题目发现\(n\)非常小,于是很容易想到状态压缩. 我们考虑比较直觉的状态,f[i][j][k]表示以i为起点,当前在j,之前去过的点状态为k的简单环的方案数 ...
- HDU 1312 Red and Black(bfs,dfs均可,个人倾向bfs)
题目代号:HDU 1312 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/100 ...