map(-)

map典例 hdoj 1251 统计难题

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,i,j,k,t;
    string b;
    char a[52];
    map<string,int>m;
    while(gets(a))
    {
        if(a[0]=='\0') break;
        t=strlen(a);
        string b;
        for(i=0;i<t;i++)
        {
            b=b+a[i];
            m[b]++;
        }
    }
    while(cin>>b)
    {
        cout<<m[b]<<endl;
    }
    return 0;
}

一个典型的map的用法,之前做是可以用substr来截取前缀,这次的思路更加巧妙,直接把第一个到最后一个都挑出来一次,因为如果挑到相同的继续加一就行了,所以不存在覆盖不了的问题。
这个也相当于线遍历枚举一次,将每一次输进来的单词都把长度算一下,然后从头开始枚举(因为字符串截取的时候就是从头开始截取的,后面给出来的都是前缀,就很骚气),然后由map从string到int,这块一定要想明白,不是因为有两个字符串的处理就是两个string,而是字符串对应的目标值为int,然后将map类似数组使用,遇到一个串就自增一次,这时候内部重新定义了一下string b就相当于初始化了一下,避免它带了之前的值。然后map不用初始化,开始本身就是0,从0开始算的。碰见换行就要停止,不然gets会一直进行输入,不停(用cin不行)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值