浏览器标题切换
浏览器标题切换end

HDU1251-统计难题-map+输入

Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).

Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

注意:本题只有一组测试数据,处理到文件结束.
Output对于每个提问,给出以该字符串为前缀的单词的数量.
Sample Input

banana
band
bee
absolute
acm

ba
b
band
abc

Sample Output

2
3
1
0


题意:

输入以该字符串为前缀的单词的数量。


注意输入:

scanf 以空格、换行符结束输入;

scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中)

gets 是读取换行符的,不过它会把换行符转换为'\0'

gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以'\0'代替;

在数据大量的情况下,用gets读取快于scanf()10倍以上

scanf不能接受空格、制表符Tab、回车等;

而gets能够接受空格、制表符Tab和回车等。将接收输入的整个字符串直到遇到换行为止。

 

复制代码
 1 #include<stdio.h>
 2 #include<map>
 3 #include<iostream>
 4 #include<string.h>
 5 using namespace std;
 6 typedef long long ll;
 7 const int x=131;
 8 const int N=1e6+20;
 9 ll book[N];
10 
11 map<string,ll>mp;
12 char a[15];
13 
14 int main()
15 {
16     //string a;
17     while(1)
18     {
19        // cin>>a;
20        gets(a);
21 //        if(a[0]=='\0')    
22 //            break;
23         int len=strlen(a);
24         if(len==0)
25             break;
26         string s;
27         s.clear();
28         for(int i=0;i<len;i++)
29         {
30            // sum=sum*x+a[i];
31             s+=a[i];
32             mp[s]++;
33         }
34     }
35 
36     while(cin>>a)
37         cout<<mp[a]<<endl;
38     return 0;
39 }
复制代码

 

posted @   抓水母的派大星  阅读(148)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示