SWITCH语句中的case后可以是字符串吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SWITCH语句中的case后可以是字符串吗?相关的知识,希望对你有一定的参考价值。

void check(char req)

int num;
if(req=='end')
cout<<"dsf"<<endl;
else
switch(req)
case 'AddLeft':
cin>>num;
AddLeft(num);
case 'AddRight':
cin>>num;
AddRight(num);
case 'IsEmpty':
IsEmpty();
case 'IsFull':
IsFull();
case 'DeleteLeft':
DeleteLeft(num);
case 'DeleteRight':
DeleteRight(num);
default:
cout<<"You input wrong request!"<<endl;

不可以的,比如下面的程序:

#include<stdio.h>

void main()

char *p="abc";

switch(p)

case "abc":
break;



编译都通不过:
error C2450: switch expression of type 'char *' is illegal
error C2051: case expression not constant
参考技术A 可以是单个字符,不可以是字符串

char p;
switch(p)

case "a":
break;
case "b":
break;
case "c":
break;

是可以的;

但是你的程序里是多个字符,也就是字符串,是不可以的
参考技术B 可以吧,不过你怎么用单引号括起来呢?
果然不可以。。。case后面的表达式必须能转换成整数才行,就是说需要是字符和整数。。。
参考技术C 当然可以了~~~flex其实就是JAVA的语法,字符串用""(双引号)表示! 参考技术D case后面接的是状态就是你定义的switch后面那个,可以定义req在某种状态,这是字符串表示的是一种模式或状态

我可以使用带有两个变量的case / switch语句吗?

在JavaScript方面我是新手,我的理解是使用一个SWITCH / CASE语句比一大堆IF语句更快。

但是,我想使用带有两个变量的SWITCH / CASE语句。

我的网络应用程序有两个滑块,每个滑块有五种状态。我希望行为基于这两个变量的状态。显然,这是很多IF / THEN陈述的全部内容。

我想到的一种方法是将两个变量连接成一个然后我可以SWITCH / CASE。

有没有更好的方法来使用两个变量完成SWITCH / CASE?

谢谢 !

答案

一个按位运算符怎么样?而不是字符串,你处理“enums”,看起来更“优雅”。

// Declare slider's state "enum"
var SliderOne = {
    A: 1,
    B: 2,
    C: 4,
    D: 8,
    E: 16
};

var SliderTwo = {
    A: 32,
    B: 64,
    C: 128,
    D: 256,
    E: 512
};

// Set state
var s1 = SliderOne.A,
    s2 = SliderTwo.B;

// Switch state
switch (s1 | s2) {
    case SliderOne.A | SliderTwo.A :
    case SliderOne.A | SliderTwo.C :
        // Logic when State #1 is A, and State #2 is either A or C
        break;
    case SliderOne.B | SliderTwo.C :
        // Logic when State #1 is B, and State #2 is C
        break;
    case SliderOne.E | SliderTwo.E :
    default:
        // Logic when State #1 is E, and State #2 is E or
        // none of above match
        break;


}

然而,我同意其他人的看法,25个案例的交换案例逻辑并不太漂亮,如果 - 在某些情况下可能“看起来”更好。无论如何。

另一答案
var var1 = "something";
var var2 = "something_else";
switch(var1 + "|" + var2) {
    case "something|something_else":
        ...
        break;
    case "something|...":
        break;
    case "...|...":
        break;
}

如果你有5种可能性,你将得到25个案例。

另一答案

首先,JavaScript's switch is no faster than if/else (and sometimes much slower)

其次,将switch与多个变量一起使用的唯一方法是将它们组合成一个原语(字符串,数字等)值:

var stateA = "foo";
var stateB = "bar";
switch (stateA + "-" + stateB) {
    case "foo-bar": ...
    ...
}

但是,就个人而言,我宁愿看到一组if / else陈述。

编辑:当所有值都是整数时,如果Chrome中的/是,则开关可能会超出。查看评论。

另一答案

我不认为开关/案例比if / elseif系列更快。他们做同样的事情,但如果/ elseif你可以检查多个变量。您不能在多个值上使用开关/案例。

另一答案

您可以为每个滑块上的每个位置指定1到1000000000的不同二进制值,然后使用总和。

另一答案

如果每个组合的动作是静态的,您可以构建一个二维数组:

var data = [
  [1,2,3,4,5],
  [6,7,8,9,10],
  [11,12,13,14,15],
  [16,17,18,19,20],
  [21,22,23,24,25]
];

上面示例中的数字可以是任何内容,例如字符串,数组等。获取值现在是一个单行(假设滑块的值范围为[0,5]:

var info = data[firstSliderValue][secondSliderValue];
另一答案

是的,但不是正常的方式。你必须使用switch作为闭包。

例如: -

function test(input1, input2) {
     switch (true) {
        case input1 > input2:
                    console.log(input1 + " is larger than " + input2);
                    break;
        case input1 < input2:
                    console.log(input2 + " is larger than " + input1);
        default:
                    console.log(input1 + " is equal to " + input2);
      }
   }
另一答案

是的你也可以这样做:

    switch (true) {

     case (var1 === true && var2 === true) :
       //do something
       break;
     case (var1 === false && var2 === false) :
       //do something
       break;

      default:

    }

这将始终执行开关,几乎就像if / else但看起来更干净。继续检查case表达式中的变量。

以上是关于SWITCH语句中的case后可以是字符串吗?的主要内容,如果未能解决你的问题,请参考以下文章

C语言的switch case 语句的case 常量 能匹配字符串常量吗?

switch语句与for语句的区别,能举例说明吗?谢啦!

switch语句中的表达式不能是字符串吗? C++ [重复]

优化:switch 语句中的 case 顺序重要吗? [关闭]

switch语句中case后面可不可以加字符串?

swtich能判断取值范围吗