idea:
1.找出给出数字所有组合字符串;
2.每一个字符串与给定字典中到单词进行比较,若匹配则输出;
实现代码:
/*
ID: mrster.1
LANG: C++
TASK: namenum
* */
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int size = 0;
char letterToNum(char letter);
string* readDict(const char* fileName);
int main()
{
ifstream fin;
fin.open("namenum.in",ifstream::in);
ofstream fout;
fout.open("namenum.out",ofstream::out);
const char* fileName = "dict.txt";
string* str = new string[5000];
string* strNum = new string[5000];
str = readDict(fileName);
strNum = readDict(fileName);
string num;
int count = 0;
getline(fin,num);
for(int i = 0;i < size;i++)
{
for(int j = 0;str[i][j] != '\0';j++)
{
strNum[i][j] = letterToNum(str[i][j]);
}
}
for(int i = 0;i < size;i++)
{
if(strNum[i] == num)
{
fout<<str[i]<<endl;
count++;
}
}
if(count == 0)fout<<"NONE"<<endl;
fin.close();
fout.close();
return 0;
}
string* readDict(const char* fileName)
{
string *str = new string[5000];
ifstream fin;
fin.open(fileName);
int i = 0;
size = 0;
while(getline(fin,str[i]))
{
i++;
size++;
}
fin.close();
return str;
}
char letterToNum(char letter)
{
char num = 0;
switch(letter)
{
case 'A':case 'B':case 'C':num = '2';break;
case 'D':case 'E':case 'F':num = '3';break;
case 'G':case 'H':case 'I':num = '4';break;
case 'J':case 'K':case 'L':num = '5';break;
case 'M':case 'N':case 'O':num = '6';break;
case 'P':case 'R':case 'S':num = '7';break;
case 'T':case 'U':case 'V':num = '8';break;
case 'W':case 'X':case 'Y':num = '9';break;
default:num = '0';
}
return num;
}