C++电话号码转对应字母

电话号码转对应字母

刚学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";
       }
      }
     }
    }
   }
  }
 }
}

猜你喜欢

转载自blog.csdn.net/weixin_44626943/article/details/89742656