电话号码转对应字母
刚学C++,想不出来高明的办法,就用了比较傻瓜式的写法,大家有更好的方法欢迎分享。
2对应ABC, 3对应DEF, 4对应GHI, 5对应JKL, 6对应MNO, 7对应PRS, 8对应TUV, 9对应WXZY;
现输入一个七位数的电话号码(范围在2-9),输出数字对应字母的全部排列。
#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
string word[10] = { "","","ABC ","DEF ","GHI ","JKL ","MNO ","PRS ","TUV ","WXYZ" };
int main()
{
ofstream phoneFile("phone.txt", ios::out);//创建一个文档存储每次输出,out表示每次运行自动覆盖前次结果
if (!phoneFile)
{
cerr << "The file can not be opened." << endl;
exit(EXIT_FAILURE);
}
char a[7];
int b[7];
cout << "Enter a phone number(2-9): " << endl;
for (int i = 0; i < 7; i++)
{
cin >> a[i];
b[i] = a[i] - '0'; //输入七个数字的电话号码,将它从字符型转为整数型
}
for (int i = 0; i < 7; i++)
{
phoneFile << b[i];
}
phoneFile << "\n";
int number = 0; //这里后面用来分为五个一行输出
//由于word数组里面最后有WXZY四个元素,其他组在最后一位设为空格,for循环时判断是否是空格,
//可实现所有输入数字对应字母的全部排列。
for (int i1 = 0; i1 <= 3&&word[b[0]][i1]!=' '; i1++)
{
for (int i2 = 0; i2 <= 3 && word[b[1]][i2] != ' '; i2++)
{
for (int i3 = 0; i3 <= 3 && word[b[2]][i3] != ' '; i3++)
{
for (int i4 = 0; i4 <= 3 && word[b[3]][i4] != ' '; i4++)
{
for (int i5 = 0; i5 <= 3 && word[b[4]][i5] != ' '; i5++)
{
for (int i6 = 0; i6 <= 3 && word[b[5]][i6] != ' '; i6++)
{
for (int i7 = 0; i7 <=3&&word[b[6]][i7]!=' ' ; i7++)
{
phoneFile << word[b[0]][i1] << word[b[1]][i2]
<< word[b[2]][i3] << word[b[3]][i4]
<< word[b[4]][i5] << word[b[5]][i6]
<< word[b[6]][i7] << " ";
number++;
if (number % 5 == 0)
phoneFile << "\n";
}
}
}
}
}
}
}
}