Справка по телефонному генератору слов C++

У меня есть домашнее задание, которое я выполнял, пока не добрался до этого последнего шага, и теперь я в тупике, я был бы очень признателен за помощь.

Предпосылкой проекта является создание файла возможных слов по заданному номеру телефона. Пользователь должен ввести число в формате «###-####». Затем код извлекает дефис и отправляет номер телефона методу wordGenerator . Я знаю, что все работает до этого момента. Когда приходит время выводить различные возможности слов, у меня возникает проблема.Вот как выглядит мой метод:

// function to form words based on phone number
void wordGenerator( const int * const n )
{
  // set output stream and open output file
  /* Write a declaration for an ofstream object called
     outFile to open the file "phone.dat" */ 
 ofstream outFile("phone.dat");
 // letters corresponding to each number

  /* Write a declaration for an array of 10 const char *'s
  called phoneLetters. Use an initializer list to assign
  each element of the array the corresponding string of
  three letters. Use dummy characters for 0 and 1 */
  const char * phoneLetters[] = {"###", "###", "ABC", "DEF", "GHI",
                     "JKL", "MNO", "PRS", "TUV", "WXY"};
  // terminate if file could not be opened
  /* Write code to check if the file was opened successfully,
     and terminate if not */
   if( !outFile )
   {
    cerr << "The file could not be opened";
    exit(1);
   }

  int count = 0; // number of words found

  // output all possible combinations
  for ( int i1 = 0; i1 <= 2; i1++ )
  {
     for ( int i2 = 0; i2 <= 2; i2++ )
     {
        for ( int i3 = 0; i3 <= 2; i3++ )
        {
           for ( int i4 = 0; i4 <= 2; i4++ )
           {
              for ( int i5 = 0; i5 <= 2; i5++ )
             {
                for ( int i6 = 0; i6 <= 2; i6++ )
                 {
                   for ( int i7 = 0; i7 <= 2; i7++ ) 
                    {
                    /* Write a series of cascaded stream insertion
               operations to output a set of seven letters
           to outFile, followed by a space */

                     outFile << phoneLetters[i7 + 2] << phoneLetters[i6 + 2] <<  phoneLetters[i5 + 2]  << phoneLetters[i4 + 2] << phoneLetters[i3 + 2] << phoneLetters[i2 + 2]
                            << phoneLetters[i1 + 2] << ' ';
                    if ( ++count % 9 == 0 ) // form rows
                       outFile << '\n';
                   } // end for
                 } // end for
              } // end for
           } // end for
         } // end for
      } // end for
    } // end for

  // output phone number
    outFile << "\nPhone number is ";

    for ( int i = 0; i < 7; i++ ) 
    {
      if ( i == 3 )
      outFile << '-';

      outFile << n[ i ];
    } // end for

   /* Write a statement to close the ouput file */
     outFile.close();
     system("pause");
    } // end function wordGenerator

К сожалению, мне дали набросок кода и сказали заполнить пробелы, чтобы выполнить задание. Везде, где блокируются комментарии (/**/ ), я должен заполнить код.

Я не уверен, что мне нужно сделать, чтобы вывести правильный формат возможных слов. Я попытался выполнить поиск в Google, но все результаты, которые я нашел, используют гораздо более простой (, на мой взгляд, )оператор switch для достижения этой цели, и я ограничен шаблоном :(

. Любая помощь приветствуется, даже подталкивание в правильное направление.

Редактировать :Я только что подумал о другом. Я чувствую, что если бы кто-то даже мог помочь мне понять, как перебирать символы phoneLetters[] по отдельности, а не блоком, это было бы значительным шагом вперед. Пример :при чтении цифры «2» телефонного номера вместо печати «ABC» печатайте «A» для всех возможных комбинаций, затем переходите к «B».

Редактировать :Вот мой основной():

int main()
{
  int phoneNumber[ 7 ] = { 0 }; // holds phone number

   // prompt user to enter phone number
   cout << "Enter a phone number (digits 2 through 9) "
     << "in the form: xxx-xxxx\n";

   // loop 8 times: 7 digits plus hyphen;
   // hyphen is not placed in phoneNumber
   for ( int u = 0, v = 0; u < 8; u++ ) 
  {
     int i = cin.get();

     // test if i is between 0 and 9
     if ( i >= '0' && i <= '9' )  
     phoneNumber[ v++ ] = i - '0';
   } // end for

   wordGenerator( phoneNumber ); // form words from phone number
   return 0;
} // end main
6
задан Bill the Lizard 20 September 2012 в 21:04
поделиться