如何输入整数并打印消息(数字键盘)
Posted
技术标签:
【中文标题】如何输入整数并打印消息(数字键盘)【英文标题】:How to take input in integers and print message (numeric keypad) 【发布时间】:2015-06-20 07:53:29 【问题描述】:我已经在互联网上搜索了这个特定的方法,但没有任何我想要的东西。我编写了这个程序,它接受整数输入并打印消息(如手机的数字键盘)。我想用这个程序做的是在一行中输入
Enter the code to crack : 454545479833165445
并打印相应的消息。 而不是
Enter the code to crack :55
Enter the code to crack : 666
并在我按下特定键时打印消息,在这种情况下为 -1。
#include <iostream>
using namespace std;
int main()
int a;
string n;
do
cout << "Enter the code to crack";
cin >>a;
switch (a)
case 0:
n=n+" ";
break;
case 1:
n=n+".";
break;
case 11:
n=n+",";
break;
case 2:
n=n+"a";
break;
case 22:
n=n+"b";
break;
case 222:
n=n+"c";
break;
case 3:
n=n+"d";
break;
case 33:
n=n+"e";
break;
case 333:
n=n+"f";
break;
case 4:
n=n+"g";
break;
case 44:
n=n+"h";
break;
case 444:
n=n+"i";
break;
case 5:
n=n+"j";
break;
case 55:
n=n+"k";
break;
case 555:
n=n+"l";
break;
case 6:
n=n+"m";
break;
case 66:
n=n+"n";
break;
case 666:
n=n+"o";
break;
case 7:
n=n+"p";
break;
case 77:
n=n+"q";
break;
case 777:
n=n+"r";
break;
case 7777:
n=n+"s";
break;
case 8:
n=n+"t";
break;
case 88:
n=n+"u";
break;
case 888:
n=n+"v";
break;
case 9:
n=n+"w";
break;
case 99:
n=n+"x";
break;
case 999:
n=n+"y";
break;
case 9999:
n=n+"z";
break;
while(a!=-1);
cout <<"The decoded message is :" << n;
return 0;
【问题讨论】:
欢迎来到***。 *** 不是论坛。 我很好奇,indenting style 是什么。 谢谢,真的很高兴。任何帮助,将不胜感激。 :) 好吧,把这个问题标记为无用真是令人心碎,我是编程新手,我确实在互联网上搜索过这个解决方案,如果这里的人不是天生的专业人士愿意提供帮助的人至少不要因为将其标记为无用或未完成研究而气馁。 @Ummmm454545479833165445
的数字太大,无法存储在 int
中
【参考方案1】:
如果你想处理一个信号输入,假设消息可能包含的许多数字肯定会溢出,即使他是对数整数类型,你必须使用字符串输入,并遍历它的字符:
string a;
string n;
cout << "Enter the code to crack";
cin >>a; // you'll get everything, but each digit is a char
for (int i=0; i<a.size(); i++)
//... process each separate digit a[i] here
cout <<"The decoded message is :" << n;
每个数字 a[i] 都在 '0' 和 '9' 之间。你必须解决两个困难:
字符串可能包含非法字符(例如字母数字),因此您必须处理这些情况,发出错误消息 每个字符串都是单独到达的。所以不再是 44,而是一个“4”和另一个“4”。所以你必须在算法中考虑前一个数字,看看你是否将最后一个输出字母移动了一个,或者你是否有一个新的输出字母。【讨论】:
在第二个项目符号中:“字符串”->“字符”。十六进制需要移位;对于纯小数,它需要 乘法(乘以 10,以及一条“数字仅为 2 位数字”的规则),但 OP 根本不需要这个。 .. 等等,OP 确实需要小数 - 因此,确实需要更多代码来区分“9”、“99”和“999”。跨度> @Jongware 我不想spoil OP 必须做的练习。电话上的原则,数字是一个接一个到达的(至少在我的电话上我没有99键)。所以 OP 必须跟踪上下文和重复。有很多方法可以做到这一点(拆分成子字符串,保持状态等......)。 @Ummmm 如果你确定一个字符是一个整数,你总是可以减去'0'
,例如a - '0'
,假设a
是一个数字字符,这将转换将其设置为具有相应值的int
。如果答案大于 9 或小于 0,您就知道该字符不是整数。
@Ummmm 所有 3 个都是有效的组合。因此遇到 222 可能是 222 或 2 和 22 或 22 和 2。对于字符串输入,您可以想象输入“-”来表示有停顿:然后 2-22 或 22-2 或 222 将被明显区分.以上是关于如何输入整数并打印消息(数字键盘)的主要内容,如果未能解决你的问题,请参考以下文章