Car*_*ano 2 c++ type-conversion char
我有一个任务,我必须制作一个程序,允许一个人输入一个七个字母的单词并将其转换为一个电话号码(例如1-800-PAINTER到1-800-724-6837).我试图让每个字母转换成一个特定的数字输出给用户,每个字母对应于电话键盘上的数字(所以a,A,b,B或c,C等于1,即更多信息:https://en.wikipedia.org/wiki/Telephone_keypad).
目前我设置它使输入字的每个字母分别代表一个,两个,三个,四个,五个,六个或七个的char变量.然后,使用switch和if语句,想法是将char转换为xtwo = 2,xthree = 3等的int变量.但是这不起作用.有一个更好的方法吗?
代码示例(直到第一个开关,但主要是像这样的重复模式):
int main()
{
char one, two, three, four, five, six, seven;
cout << "Enter seven letter word (1-800-***-****): " << "\n";
cin >> one >> two >> three >> four >> five >> six >> seven;
int xtwo = 2; int xthree = 3; int xfour = 4; int xfive = 5; int xsix = 6; int xseven = 7; int xeight = 8;
int xnine = 9;
switch (one)
{
case 1:
if (one == 'a' || one == 'b' || one == 'c' || one == 'A' || one == 'B' || one == 'C')
{
one = xtwo;
}
break;
case 2:
if (one == 'd' || one == 'e' || one == 'f' || one == 'D' || one == 'E' || one == 'F')
{
one = xthree;
}
break;
case 3:
if (one == 'g' || one == 'h' || one == 'l' || one == 'G' || one == 'H' || one == 'L')
{
one = xfour;
}
break;
case 4:
if (one == 'j' || one == 'k' || one == 'l' || one == 'J' || one == 'K' || one == 'L')
{
one = xfive;
}
break;
case 5:
if (one == 'm' || one == 'n' || one == 'o' || one == 'M' || one == 'N' || one == 'O')
{
one = xsix;
}
break;
case 6:
if (one == 'p' || one == 'q' || one == 'r' || one == 's' || one == 'P' || one == 'Q' || one == 'R' || one == 'S')
{
one = xseven;
}
break;
case 7:
if (one == 't' || one == 'u' || one == 'v' || one == 'T' || one == 'U' || one == 'V')
{
one = xeight;
}
break;
case 8:
if (one == 'w' || one == 'x' || one == 'y' || one == 'z' || one == 'W' || one == 'X' || one == 'Y' || one == 'Z')
{
one = xnine;
}
break;
}
Run Code Online (Sandbox Code Playgroud)
那么,实质上,如何将字母的char变量转换为特定的int变量?
你可以用一个std::map.
例如,你可以拥有
std::map<char,int> char_to_dig {
{'a',1}, {'b',1}, {'c',1},
{'d',2}, {'e',2}, {'f',2}
};
Run Code Online (Sandbox Code Playgroud)
然后
char_to_dig['a']
Run Code Online (Sandbox Code Playgroud)
会给你的1.
或者,您可以编写一个执行映射的函数.有点像这样:
int char_to_dig(char c) {
static const char _c[] = "abcdefghi";
static const int _i[] = { 1,1,1,2,2,2,3,3,3 };
for (unsigned i=0; i<9; ++i) {
if (_c[i]==c) return _i[i];
}
return -1; // some value to signal error
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以对chars 执行算术(因为它们只是小整数),而不是使用数组.
int char_to_dig(char c) {
c = std::toupper(c);
if (c < 'A' || c > 'Z') return -1;
if (c == 'Z') return 9;
if (c > 'R') --c;
return ((c-'A')/3)+2;
}
Run Code Online (Sandbox Code Playgroud)
这将给你这个垫上的数字:
显然,有一个类似的代码黄金问题.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |