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

前言:在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

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,是不能对字符串类型的变量(如std::string)使用switch/case语句的。 因为switch/case语句只能用于整型类型的变量,无法直接对字符串进行比较。但是可以通过其他方式来实现对字符串的条件判断和分支控制。 一种常见的方法是使用if/else语句,通过逐个比较字符串的内容来进行条件判断。例如,可以使用std::string的compare函数来比较字符串,并根据比较结果执行相应的代码块。 另一种方法是使用映射表,将字符串和对应的处理函数一一映射起来。可以使用std::unordered_map或者std::map来实现这种映射关系,然后根据输入的字符串在映射表中查找对应的函数来执行。 综上所述,虽然不能直接在C语言中使用switch/case语句对字符串进行条件判断,但可以通过if/else语句或者映射表来实现类似的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [在C++中对字符串std::string使用switch/case语句](https://blog.csdn.net/zhangpeterx/article/details/94411133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C++ - std::string字符串格式化方法总结](https://blog.csdn.net/HW140701/article/details/127897839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值