如何将char值转换为特定的int值

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变量?

SU3*_*SU3 5

你可以用一个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)

这将给你这个垫上的数字:

在此输入图像描述


显然,有一个类似的代码黄金问题.