加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

电话字生成器帮助C.

发布时间:2020-12-16 03:35:45 所属栏目:百科 来源:网络整理
导读:我有一些作业,直到我走到最后一步,我现在难倒,我真的很感激一些帮助. 该项目的前提是在给定电话号码的情况下创建可能的单词文件.用户打算输入格式为“### – ####”的数字.然后代码拉出连字符并将电话号码发送到方法wordGenerator.我知道在此之前一切正常.当
我有一些作业,直到我走到最后一步,我现在难倒,我真的很感激一些帮助.

该项目的前提是在给定电话号码的情况下创建可能的单词文件.用户打算输入格式为“### – ####”的数字.然后代码拉出连字符并将电话号码发送到方法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

不幸的是,我被赋予了一个代码框架,并被告知填写空白以完成任务.评论被阻止的地方(/ * * /)是我必须填写代码的地方.

我不确定我需要做什么来输出可能的单词的正确格式.我尝试搜索谷歌,但我找到的所有结果使用更简单(在我看来)切换语句来实现这一点,我受限于模板:(

所有的帮助都很受欢迎,甚至是朝着正确的方向推进.

编辑:
我只是想到了另外一件事.我觉得如果有人能帮我弄清楚如何单独遍历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-xxxxn";

   // 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

解决方法

如果你无法摆脱可怕的嵌套for语句,那么你可以使用以下行:
outFile
    << phoneLetters[n[0]][i1]
    << phoneLetters[n[1]][i2]
    << phoneLetters[n[2]][i3]
    << phoneLetters[n[3]][i4]
    << phoneLetters[n[4]][i5]
    << phoneLetters[n[5]][i6]
    << phoneLetters[n[6]][i7]
    << ' ';

关于代码的一些其他说明:

>避免在C中使用退出,因为prevents destructors from running
>使用using namespace语句避免使用namespace pollution(我假设上面有一个using namespace std;语句)
>如果您没有使用退出并删除暂停(或添加范围),则explicit close of fstream is redundant

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读