C ++将电话键盘号码翻译成字母表

时间:2015-09-27 11:54:48

标签: c++

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

感谢您的评论指出我没有包含错误消息,它说"矢量下标超出范围"。

#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;
}

2 个答案:

答案 0 :(得分: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次。

答案 1 :(得分:0)

你也可以用这个方法

void decode(char arr) { 字符键盘[][5] = {"0 ", "1", "ABC2", "DEF3", "GHI4", "JKL5", "MNO6", "PQRS7", "TUV8", "WXYZ9", " ", "#"}; 字符 ch, *str; size_t 大小 = 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] = '\0';

printf("%s",str);

free(str);

}

相关问题