我如何使用switch语句?

时间:2011-03-21 02:09:35

标签: c++ switch-statement

我试图更好地理解switch语句。我不需要代码,但有点了解它将如何完成。

如果有人输入了7位数的电话号码EG。 555-3333但输入为“jkl-deff”,因为它会与拨号盘上的字母对应,我如何将输出更改回数字?

这会有效吗?

switch (Digit[num1])
  case 'j,k,l':
              num1 = 5;
              break;
  case 'd,e,f':
              num1 = 3;
              break;

3 个答案:

答案 0 :(得分:3)

要使用switch语句执行此操作,您必须遍历char数组,然后启用每个字符。将所有具有相同编号的字符组合在一起。

这样的东西
switch (phoneChar[i])
case 'a':
case 'b':
case 'c':
   newChar[i] = '2';
   break;

那就是说,我不确定开关盒是最好的方法。我不知道最好的是什么是最好的,但有些事情是错的:)

修改 我将是当前正在考虑的角色的索引。对于电话号码,您将拥有7(或8或10或12个字符的字符串,具体取决于格式)。你必须一次拿走每个角色..所以在上面的例子中,电话[0] ='j'。

答案 1 :(得分:2)

我不会使用开关!

// A,B,C => 2;  D,E,F => 3 etc.
static int  convert[] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};


for(int loop =0 ;loop < Digit.size(); ++loop)
{
    num = convert[Digit[loop] - 'a'];
                  // Thus the character 'a' gets mapped to position 0
                  //      the character 'b' gets mapped to position 1 etc.
    // num is then the character mapped into the covert[] array above.  
}

答案 2 :(得分:0)

你可能会这样做:

if (islower(c)) { num=(c-'a')/3; num = 2 + (num==8) ? 7 : num; }

将字符转换为电话簿数字。最后的num == 8部分处理9键上的exra数字。

总之它看起来像这样:

char c = getNextCharacterSomehow();
int num = -1;

if (isdigit(c)) num = c-'0';
else if (islower(c)) { num=(c-'a')/3; num = 2 + (num==8) ? 7 : num; }
else if (isupper(c)) { num=(c-'A')/3; num = 2 + (num==8) ? 7 : num; }

另外,关于switch语句的注释:“case”和“:”之间的项必须与“switch()”部分指定的类型相同。那个类型必须是一个标量,它排除了像字符串这样的东西。