翻译电话键盘数字成字母

C++ translate phone keypad number into alphabet

本文关键字:数字 电话 键盘 翻译      更新时间:2023-10-16

简单地说,这个程序要求用户输入一个不超过17位的非空数字序列,例如44477610223332145,并将其输出为字母句子。翻译如下:2是"A",22是"B",222是"C",3是"D"等等0表示空格,1表示暂停,例如441444,用于分割44和444。现在我的代码遇到了一个运行时错误,因为我是c++的新手,我不知道这里发生了什么。请帮忙检查一下。谢谢!

感谢你的评论指出我没有包括错误信息,它说"vector下标超出范围"。

#include <iostream>
#include<map>
#include<string>
#include<vector>
using namespace std;
int main()
{
    string n;
    vector<string> o;
    int i, x(0);
    map<string, char>character;
    {
        character["2"] = 'A';
        character["22"] = 'B';
        character["222"] = 'C';
        character["3"] = 'D';
        character["33"] = 'E';
        character["333"] = 'F';
        character["4"] = 'G';
        character["44"] = 'H';
        character["444"] = 'I';
        character["5"] = 'J';
        character["55"] = 'K';
        character["555"] = 'L';
        character["6"] = 'M';
        character["66"] = 'N';
        character["666"] = 'O';
        character["7"] = 'P';
        character["77"] = 'Q';
        character["777"] = 'R';
        character["7777"] = 'S';
        character["8"] = 'T';
        character["88"] = 'U';
        character["888"] = 'V';
        character["9"] = 'W';
        character["99"] = 'X';
        character["999"] = 'Y';
        character["9999"] = 'Z';
        character["0"] = ' ';
    }
    cout << "Please enter the message: ";
    cin >> n;
    for(i = 0; i < 17; i++)
    {
        if(n.at(i) == n.at(i + 1))
            o[x] = n.at(i) + n.at(i + 1);
        else
            x++;
        o[x] = n.at(i);
    }
    for(x = 0; x < o.size(); x++)
        cout << "Output message: " << character[o[x]] << endl;
    cout << "Count: " << o.size() << endl;
    return 0;
}

不能对第17个元素执行if(n.at(i) == n.at(i + 1)),因为之后没有元素,n.at(17)会抛出std::out_of_range

使用short-circuit-evaluation:

if(i < 16 && n.at(i) == n.at(i + 1))

n.at(i) == n.at(i + 1)不会对i == 16进行评估。

此外,

程序要求用户输入一个非空数字序列,例如44477610223332145 最多17位

但是即使n较短,循环也要迭代17次。

您也可以使用这个方法

void decode(char arr){键盘char[][5] ={"0","1","ABC2","DEF3","GHI4","JKL5","MNO6","PQRS7","TUV8","WXYZ9","","#";};Char, *str;size = 1;Int i, j = 0;

str = (char*)malloc(sizeof(char) * size);
for(i = 0; i < strlen(arr); i++)
{
    switch(arr[i])
    {
    case '0':
        ch = keypad[0][1];
        if (arr[i] == arr[i + 1])
        {
            ch = keypad[0][0];
            i++;
        }
        break;
    case '1':
        ch = keypad[1][0];
        i++;
        break;
    case '2':
        ch = keypad[2][0];
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[2][1];
            i++;
        }
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[2][2];
            i++;
        }
        if (arr[i] == arr[i + 1])
        {
            ch = keypad[2][3];
            i++;
        }
        break;
    case '3':
        ch = keypad[3][0];
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[3][1];
            i++;
        }
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[3][2];
            i++;
        }
        if (arr[i] == arr[i + 1])
        {
            ch = keypad[3][3];
            i++;
        }
        break;
    case '4':
        ch = keypad[4][0];
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[4][1];
            i++;
        }
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[4][2];
            i++;
        }
        if (arr[i] == arr[i + 1])
        {
            ch = keypad[4][3];
            i++;
        }
        break;
    case '5':
        ch = keypad[5][0];
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[5][1];
            i++;
        }
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[5][2];
            i++;
        }
        if (arr[i] == arr[i + 1])
        {
            ch = keypad[5][3];
            i++;
        }
        break;
    case '6':
        ch = keypad[6][0];
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[6][1];
            i++;
        }
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[6][2];
            i++;
        }
        if (arr[i] == arr[i + 1])
        {
            ch = keypad[6][3];
            i++;
        }
        break;
    case '7':
        ch = keypad[7][0];
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[7][1];
            i++;
        }
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[7][2];
            i++;
        }
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[7][3];
            i++;
        }
        if (arr[i] == arr[i + 1])
        {
            ch = keypad[7][4];
            i++;
        }
        break;
    case '8':
        ch = keypad[8][0];
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[8][1];
            i++;
        }
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[8][2];
            i++;
        }
        if (arr[i] == arr[i + 1])
        {
            ch = keypad[8][3];
            i++;
        }
        break;
    case '9':
        ch = keypad[9][0];
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[9][1];
            i++;
        }
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[9][2];
            i++;
        }
        if(arr[i] == arr[i + 1])
        {
            ch = keypad[9][3];
            i++;
        }
        if (arr[i] == arr[i + 1])
        {
            ch = keypad[9][4];
            i++;
        }
        break;
    case '.':
        continue;
    }
    *(str + j) = ch;
    str = (char*)realloc(str,size * sizeof(char));
    j++;
}
str[j] = '';
printf("%s",str);
free(str);

}