我试图更好地理解switch语句。我不需要代码,但有点了解它将如何完成。
如果有人输入了7位数的电话号码EG。 555-3333但输入为“jkl-deff”,因为它会与拨号盘上的字母对应,我如何将输出更改回数字?
这会有效吗?
switch (Digit[num1])
case 'j,k,l':
num1 = 5;
break;
case 'd,e,f':
num1 = 3;
break;
答案 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()”部分指定的类型相同。那个类型必须是一个标量,它排除了像字符串这样的东西。