Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用switch语句?_C++_Switch Statement - Fatal编程技术网

C++ 如何使用switch语句?

C++ 如何使用switch语句?,c++,switch-statement,C++,Switch Statement,我试图更好地理解switch语句。我不需要代码,但有点像是一个如何做的演练 如果有人输入一个7位数的电话号码,如555-3333,但输入为“jkl deff”,因为它与拨号盘上的字母相对应,我如何将输出更改回数字 这是否有效: switch (Digit[num1]) case 'j,k,l': num1 = 5; break; case 'd,e,f': num1 = 3;

我试图更好地理解switch语句。我不需要代码,但有点像是一个如何做的演练

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

这是否有效:

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

要使用switch语句实现这一点,您必须遍历char数组,打开每个字符。将具有相同编号的所有字符分组在一起

差不多

switch (phoneChar[i])
case 'a':
case 'b':
case 'c':
   newChar[i] = '2';
   break;
也就是说,我不确定开关箱是否是最好的方法。我不知道什么才是最好的,但我觉得这有点不对劲:)

编辑
i将是当前正在考虑的角色的索引。您将有一个7(或8、10或12个字符的字符串,具体取决于格式)。你必须一次扮演每个角色。。因此,在上面的示例中,phone[0]='j'。

要使用switch语句实现这一点,您必须遍历char数组,打开每个字符。将具有相同编号的所有字符分组在一起

差不多

switch (phoneChar[i])
case 'a':
case 'b':
case 'c':
   newChar[i] = '2';
   break;
也就是说,我不确定开关箱是否是最好的方法。我不知道什么才是最好的,但我觉得这有点不对劲:)

编辑
i将是当前正在考虑的角色的索引。您将有一个7(或8、10或12个字符的字符串,具体取决于格式)。你必须一次扮演每个角色。。所以电话[0]=“j”在上面的例子中。

我不会使用开关

// 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.  
}
//A,B,C=>2;D、 E,F=>3等。
静态int convert[]={2,2,2,3,3,4,4,4,5,5,6,6,7,7,8,8,8,9,9};
for(int循环=0;循环
我不会使用开关

// 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.  
}
//A,B,C=>2;D、 E,F=>3等。
静态int convert[]={2,2,2,3,3,4,4,4,5,5,6,6,7,7,8,8,8,9,9};
for(int循环=0;循环
您可能可以这样做:

if (islower(c)) { num=(c-'a')/3; num = 2 + (num==8) ? 7 : num; }
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; }
将字符转换为手机键盘数字。末尾的num==8部分处理9键上的exra数字

总的来说,它看起来是这样的:

if (islower(c)) { num=(c-'a')/3; num = 2 + (num==8) ? 7 : num; }
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()”部分指定的内容相同的类型。该类型必须是标量,它排除了字符串之类的内容。

您可能可以这样做:

if (islower(c)) { num=(c-'a')/3; num = 2 + (num==8) ? 7 : num; }
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; }
将字符转换为手机键盘数字。末尾的num==8部分处理9键上的exra数字

总的来说,它看起来是这样的:

if (islower(c)) { num=(c-'a')/3; num = 2 + (num==8) ? 7 : num; }
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()”部分指定的内容相同的类型。并且该类型必须是标量,它排除了字符串之类的内容。

+1表示“感觉不对劲”。用一个简单的翻译表,用输入字符索引可能会更好。我同意,这不是最好的方法。将字母与数字匹配的数组会更干净。这里的“i”代表什么?是的,我认为将字母与数字匹配的某种字典(键/值)对象会更好-并遍历它们提供的值以“转换”它。如果用户输入数字,每个数字加上连字符被读入一个char变量,比如num1,num2…num 7,num8--------所以你可以这样做。+1表示“感觉不对劲”。用一个简单的翻译表,用输入字符索引可能会更好。我同意,这不是最好的方法。将字母与数字匹配的数组会更干净。这里的“i”代表什么?是的,我认为将字母与数字匹配的某种字典(键/值)对象会更好-并遍历它们提供的值以“转换”它。如果用户输入数字,每个数字加上连字符都被读入一个字符变量,比如num1、num2……num 7、num8--------所以你可以这样做。你想要这些
jjddd
kkk eeee
jkl deff
=
555-3333
?是,没错。你想要这些
jjjddddd
kkk eeee
jkl deff
=
555-3333
?是的,没错。当然,一旦有人输入了非字符的内容,你就会出错。这还假定输入是严格的ASCII码,从而使表变得简单。@edA:它还没有完成,并且工作到OP POST代码的程度。需要额外的错误检查和数字处理。注意:它不假定为ASCII。当然,一旦有人输入了非字符的内容,你就会犯错误。这还假定输入是严格的ASCII码,从而使表变得简单。@edA:它还没有完成,并且工作到OP POST代码的程度。需要额外的错误检查和数字处理。注意:它不假定为ASCII。虽然它假定字符是顺序成员。