在C ++中打印电话号码中所有可能的单词

在这个问题中,我们得到一个数字,我们必须打印可以通过在老式的移动键盘中按下这些单词而形成的所有单词。

我们对今天使用的QWERTY键盘样式非常熟悉。但是在发明QWERTY键盘电话之前,它已经配备了带有12个按钮的键盘,每个按钮都包含单词和数字。就像它们一样,键盘上的单词6将包含单词“ MNO”,可通过单击一次,两次或三次按键来键入。

键盘看起来像这样-

12个
ABC
3
DEF
4
GHI
5
JKL
6
MNO
7个
PQRS
8
TUV
9
WXYZ
*0#

在这些关键字中,所有单词也都存在,然后用户可以键入。因此,在此问题中,我们将打印出使用给定的数字序列可以生成的所有可能的单词。

让我们举个例子来更好地理解问题-

Input: 687

Output: MTP, MTQ, MTR, MTR, MUP, MUQ, MUR, MUS, MVP, MVQ,

MVR, MVR, NTP, NTQ, NTR, NTR, NUP, NUQ, NUR, NUS, NVP, NVQ,

NVR, NVR, OTP, OTQ, OTR, OTR, OUP, OUQ, OUR, OUS, OVP, OVQ,

OVR, OVR.

为了解决此问题,让我们看一下上面示例中的模式。每个按钮都有其自己的关联字符,我们将在键入时使用它们。因此,对于每个数字,最多有4个选项(在7和9的情况下)。为此,我们可以固定数字,然后使用数字和生成单词。这可以使用递归来完成。

让我们的程序使用递归实现概念。

示例

#include <iostream>

#include <string.h>

using namespace std;

const char keypad[10][5] = {"", "", "abc", "def", "ghi", "jkl", "mno",

"pqrs", "tuv", "wxyz"};

void printWords(int number[], int curr_digit, char output[], int n){

   int i;

   if (curr_digit == n){

      cout<<output<<" ";

      return ;

   }

   for (i=0; i<strlen(keypad[number[curr_digit]]); i++){

      output[curr_digit] = keypad[number[curr_digit]][i];

      printWords(number, curr_digit+1, output, n);

      if (number[curr_digit] == 0 || number[curr_digit] == 1)

         return;

   }

}

int main(void){

   int number[] = {6,8,7};

   cout<<"The output character formed is : \n";

   int n = sizeof(number)/sizeof(number[0]);

   char result[n+1];

   result[n] ='\0';

   printWords(number, 0, result, n);

   return 0;

}

输出结果

形成的输出字符为-

mtp mtq mtr mts mup muq mur mus mvp mvq mvr mvs ntp ntq ntr nts

nup nuq nur nus nvp nvq nvr nvs otp otq otr ots oup ouq our ous ovp

ovq ovr ovs

以上是 在C ++中打印电话号码中所有可能的单词 的全部内容, 来源链接: utcz.com/z/316940.html

回到顶部