首先应该解决一个数字对应多个字母的问题,我采用的是二位数组,每一行代表的是每一个数字,每一行所对应的列是这个数字所对应的字母,这样解决了
数字与字母的对应问题,后面的 思路就是对一组数字如4374 ,记录字典里的每一个单词的命中次数,所谓命中就是第一个数字所代表的字母跟这个单词的
第一个字母是一样的,那么我们就成这个单词命中了.
那么,如果这个单词命中的次数等于这个单词的长度,即全部命中,那么,他就是符合要求的单词,将他输出就可以了,
用一个变量记录输出的个数,.如果没有输出,则说明没有符合要求的单词,那程序就输出"NONE"
/*
ID: zhuihun1
PROG: namenum
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include<algorithm>
using namespace std;
char num[8][3]={{'A','B','C'},{'D','E','F'},{'G','H','I'},{'J','K','L'},{'M','N','O'},{'P','R','S'},{'T','U','V'},{'W','X','Y'}};
string dict[5005];
int effctive[5005];
int n=0;
void pen(char c,int x)
{
for(int i=0;i<n;i++)
if(dict[i][x]==c)
effctive[i]+=1;
}
int main()
{
ofstream fout ("namenum.out");
ifstream fin ("namenum.in");
ifstream dict_stream ("dict.txt");
int i,j,k;
string m;
while(dict_stream>>dict[n++])
{}
while(fin>>m)
{
memset(effctive,0,5005);
char c;
int l=m.length();
for(i=0;i<l;i++)
{
j=m[i]-'2';
for(k=0;k<3;k++)
{
c=num[j][k];
pen(c,i);
}
}
bool f=true;
for(i=0;i<n;i++)
{
if(effctive[i]==l&&(int)dict[i].length()==l)
{
cout<<dict[i]<<endl;
f=false;
}
}
if(f)
cout<<"NONE"<<endl;
}
return 0;
}