You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++:如何实现根据字符串匹配枚举名称并输出对应值的函数

字符串转指定枚举值的实现方案

我正在完成一项作业,尝试了各种搜索方式,但只找到“如何将枚举转换为字符串”的相关内容。我有一个字符串type,其取值只能为"webApp"、"MobileApp"和"DesktopApp",同时定义了如下枚举:

enum applicationType { webApp = 5, MobileApp = 10, DesktopApp = 15 };

请问如何编写函数判断输入字符串是否对应枚举名称,若是则输出对应的枚举值?给出的函数雏形如下:

applicationType print_enum(string tip) {
    //若tip为"webApp"则输出5
}

方法一:条件分支判断

针对限定的几个枚举项,直接用if-else分支匹配字符串,逻辑直观易理解:

#include <string>
#include <stdexcept>

enum applicationType { webApp = 5, MobileApp = 10, DesktopApp = 15 };

applicationType print_enum(std::string tip) {
    if (tip == "webApp") {
        return webApp;
    } else if (tip == "MobileApp") {
        return MobileApp;
    } else if (tip == "DesktopApp") {
        return DesktopApp;
    }
    // 处理非法输入,这里抛出异常提示无效类型,也可根据需求返回默认值
    throw std::invalid_argument("Invalid application type string");
}

方法二:哈希映射表

如果后续枚举项可能扩展,用std::unordered_map维护字符串与枚举值的映射会更易维护,代码也更简洁:

#include <string>
#include <unordered_map>
#include <stdexcept>

enum applicationType { webApp = 5, MobileApp = 10, DesktopApp = 15 };

applicationType print_enum(std::string tip) {
    // 静态映射表,仅初始化一次
    static const std::unordered_map<std::string, applicationType> type_map = {
        {"webApp", webApp},
        {"MobileApp", MobileApp},
        {"DesktopApp", DesktopApp}
    };

    auto iter = type_map.find(tip);
    if (iter != type_map.end()) {
        return iter->second;
    }
    throw std::invalid_argument("Invalid application type string");
}

注意事项

  • 匹配时严格区分大小写,比如输入"webapp"会不匹配枚举名"webApp",如果需要忽略大小写,可以在匹配前将字符串统一转换为小写(或大写)后再判断。
  • 如果作业明确输入只会是三个有效值,可省略异常处理逻辑,但实际开发中建议保留错误处理,避免非法输入引发未知问题。

内容的提问来源于stack exchange,提问作者Bl4ck Spyrit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:51:45