C++ : switch:switch string的两种用法

  • Post author:
  • Post category:其他


前言:在C++ 中 switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。

1:通过枚举来实现switch 语句中的 expression

// 定义信号枚举常量
enum SIGNALSET
{
    RED, YELLOW, BLACK, WHITE,BLUE
};


void enum_iterator() {
    for (int i = RED; i <= WHITE; i++)
    {
        // switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。
        switch (i)
        {
        case RED:
            cout << "RED index= " << i << endl;
            break;
        case YELLOW:
            cout << "YELLOW index= " << i << endl;
            break;
        case BLACK:
            cout << "BLACK index= " << i << endl;
            break;
        case WHITE:
            cout << "BLACK index= " << i << endl;
            break;
        default:
            break;
        }
    }
}


int main()
{
    enum_iterator();
}


打印结果
RED index= 0
YELLOW index= 1
BLACK index= 2
BLACK index= 3

2:通过map的方式来实现switch 语句中的 expression

map<string, int> control_param = {
    { "RED", 1 },
    { "YELLOW", 2 },
    { "BLACK",3 },
    { "WHITE",4 },
    { "BLUE",5 }
};


/**
    如果语法中大量使用if…else语句会造成代码臃肿,if语句C++语法中switch…case中case只能是整形变量,
    这里提供了一种思路,用map方法使健与值对应,这样字符串string类型与int型便对应上了,便可以实现匹配string。

*/
void Func_Mapa(int* key, const string value) {
    // [] 实现的就是从一个map中查找一个key,如果找到就返回对应的内容,如果没有找到,则返回空字符串
    int caseKey = control_param[value];
    switch (caseKey)
    {
    case 1:
        *key = 1;
        break;
    case 2:
        *key = 22;
        break;
    case 3:
        *key = 3;
        break;
    case 4:
        *key = 4;
        break;
    case 5:
        *key = 55;
        break;
    default:
        break;
    }

    
    cout << "switch key: " << *key << endl;

}


int main()
{
    
    int testKey = 0;
   Func_Mapa(&testKey, "YELLOW");
}



打印结果
switch key: 22



版权声明:本文为u013620306原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。