zoukankan      html  css  js  c++  java
  • HDU 4287 Intelligent IME(string,map,stl,make_pair)

    题目

    转载来的,有些stl和string的函数蛮好的:

    //numx[i]=string(sx); //把char[]类型转换成string类型

    // mat.insert(make_pair(numx[i],0)); //创造一个(string,int)整体——结构体,插入map

    //sx[j]=ch[sx[j]-'a'];//把字母转换成相应的数字

    //mat.find(numx[i])->second;//返回位置—— 取map当中num[i]对应的键值

    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<map>
    using namespace std;
    char ch[30]={'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','7','7','7','8','8','8','9','9','9','9'};
    string numx[5005];
    map<string,int> mat; //int是用来记录要输出的答案——数量的
    int main()
    {
        int cas,n,m;
        char sx[10];
        scanf("%d",&cas); 
        for(;cas--;)
        {
            mat.clear();
            scanf("%d%d",&n,&m);
            for(int i=0;i<n;++i)
            {
                scanf("%s",sx);
                numx[i]=string(sx); //把char[]类型转换成string类型
                mat.insert(make_pair(numx[i],0)); //创造一个(string,int)整体——结构体,插入map
            }
            for(int i=0;i<m;++i)
            {
                scanf("%s",sx);
                for(int j=0;j < strlen(sx);++j)
                    sx[j]=ch[sx[j]-'a'];//把字母转换成相应的数字
                if(mat.count( string(sx) )!=0)
                    (mat.find( string(sx) )->second)++;
            }
            for(int i=0;i<n;++i)
                printf("%d
    ",mat.find(numx[i])->second);
        }
        return 0;
    }
    View Code

    //根据百度来的写的:

    //string ch = "22233344455566677778889999";//string下标也从0开始

    //mapp[ num[i] ] = 0; //保存这种按法相应的答案——种类数的,键值对应

    // int len=sx.length(); //string的长度s.length()

    //mapp.count(sx)//返回map当中sx的数目——查找mapp当中是否存在sx这个数字串(键),若sx的数目不等于0,说明存在

    //mapp[sx]++;//键sx对应的值增加1

    #include<stdio.h>
    #include<string>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<map>
    using namespace std;
    map<string, int > mapp;
    string ch = "22233344455566677778889999";//string下标也从0开始
    int main()
    {
        int n,m,t,i;
        string num[5010];
        string sx;
        scanf("%d",&t);
        while(t--)
        {
                scanf("%d%d",&n,&m);
                for(i=0;i<n;i++)
                {
                    cin >> num[i];
                    mapp[ num[i] ] = 0; //保存这种按法相应的答案——种类数的
                }
                for(i=0;i<m;i++)
                {
                    cin >> sx;
                    int len=sx.length(); //string的长度s.length()
                    for(int j=0; j<len; j++)
                    {
                        sx[j]=ch[ sx[j]-'a' ];//把字母转换成数字(也是字符型的数字),模拟一下就理解了,string下标从0开始
                    }
                    if(mapp.count(sx))//查找mapp当中是否存在sx这个数字串(键),若sx的数目不等于0,说明存在
                    {
                        mapp[sx]++;//键sx对应的值数目增加1
                    }
                }
                //输出n个健相应的值
                for(i=0;i<n;i++)
                {
                    printf("%d
    ",mapp[num[i]]);
                }
        }
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    文本效果
    C# 将数据导出到Execl汇总[转帖]
    using方法的使用
    存储过程的相关记录
    Dictionary 泛型字典集合[转帖]
    JS验证
    浅谈AutoResetEvent的用法 [转帖]
    聊聊xp和scrum在实战中的应用问题
    字体下载
    [转] 前端开发工程师如何在2013年里提升自己
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3821915.html
Copyright © 2011-2022 走看看