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\n",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\n",mapp[num[i]]);
            }
    }
    return 0;
}
View Code

 

posted @ 2014-07-03 11:00  laiba2004  Views(152)  Comments(0Edit  收藏  举报