简单地说,该程序要求用户输入一系列非空数字,例如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;
}
答案 0 :(得分:0)
第17个元素不能if(n.at(i) == n.at(i + 1))
,因为之后没有元素,n.at(17)
会抛出std::out_of_range
。
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);
}