翻译电话键盘数字成字母
C++ translate phone keypad number into alphabet
简单地说,这个程序要求用户输入一个不超过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);
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 电话拨号程序将字母转换为卡片花色而不是数字
- 翻译电话键盘数字成字母
- 将奇怪的十六进制电话号码转换为正常数字