C++ switch case字符串_C++如何实现字符串switch匹配


C++中switch不支持字符串匹配,因仅能处理整型类型。可通过std::map将字符串映射为枚举值,再用switch判断,如getCommandType函数示例;少量字符串时宜用if-else链,简洁直观;高级技巧可用constexpr哈希函数在编译期将字符串转为整数参与switch,但需防范哈希冲突。推荐优先采用map+enum方案,兼顾可读性与效率。

c++ switch case字符串_c++如何实现字符串switch匹配

在C++中,switch语句不支持直接对字符串进行匹配,因为switch只能作用于整型或可转换为整型的类型(如char、int、enum等),而字符串(如const char* 或 std::string)是复合类型,无法作为switch的判断条件。但可以通过一些技巧间接实现“字符串匹配”的效果。

1. 使用std::map或unordered_map映射字符串到枚举

将字符串映射为一个整型值(通常是枚举),再在switch中使用该整型值进行判断,是最常见且高效的方法。

示例代码:

#include <iostream>
#include <string>
#include <unordered_map>
<p>enum class CommandType {
UNKNOWN,
START,
STOP,
RESTART,
STATUS
};</p><p>CommandType getCommandType(const std::string& cmd) {
static const std::unordered_map<std::string, CommandType> commandMap = {
{"start", CommandType::START},
{"stop", CommandType::STOP},
{"restart", CommandType::RESTART},
{"status", CommandType::STATUS}
};</p><pre class='brush:php;toolbar:false;'>auto it = commandMap.find(cmd);
return (it != commandMap.end()) ? it->second : CommandType::UNKNOWN;

}

int main() { std::string input; std::cout > input;

switch (getCommandType(input)) {
    case CommandType::START:
        std::cout << "Starting...\n";
        break;
    case CommandType::STOP:
        std::cout << "Stopping...\n";
        break;
    case CommandType::RESTART:
        std::cout << "Restarting...\n";
        break;
    case CommandType::STATUS:
        std::cout << "Status check...\n";
        break;
    case CommandType::UNKNOWN:
        std::cout << "Unknown command.\n";
        break;
}

return 0;

}

2. 使用if-else替代(适用于少量字符串)

如果字符串选项不多,直接用if-else if链更直观,避免过度设计。

if (cmd == "start") {
    // 处理 start
} else if (cmd == "stop") {
    // 处理 stop
} else if (cmd == "restart") {
    // 处理 restart
} else {
    // 未知命令
}

3. 利用constexpr哈希函数实现编译期字符串哈希(高级技巧)

通过计算字符串的编译期哈希值,将其转换为整数,然后在switch中使用该哈希值。这种方法可以保持switch语法结构,但需注意哈希冲突。

Viggle AI Video Viggle AI Video

Powerful AI-powered animation tool and image-to-video AI generator.

Viggle AI Video 115 查看详情 Viggle AI Video

示例:编译期字符串哈希

constexpr unsigned int hash(const char* str, int h = 0) {
    return !str[h] ? 5381 : (hash(str, h+1) * 33) ^ str[h];
}
<p>// 使用方式
switch (hash(cmd.c_str())) {
case hash("start"):
std::cout << "Starting...\n";
break;
case hash("stop"):
std::cout << "Stopping...\n";
break;
// ...
}</p>

此方法要求C++14以上支持递归constexpr,且需确保无哈希冲突,否则行为未定义。

总结与建议

虽然C++原生不支持字符串switch,但可通过以下方式实现类似功能:

  • 推荐使用map + enum + switch组合,清晰且易于维护
  • 少量分支时,if-else更简单直接
  • 追求性能和语法美观可尝试编译期哈希,但要小心冲突

基本上就这些,关键是根据实际场景选择合适方案。

以上就是C++ switch case字符串_C++如何实现字符串switch匹配的详细内容,更多请关注其它相关文章!


# c++  # ios  # switch  # stream  # ai  # 美容护肤网站推广方案  # 网络推广和营销有区别吗  # 企业建设招标网站  # 天新seo官网  # 整站排名搜行者SEO  # 徐州营销网站建设预算  # 购物网站建设培训班价格  # 坪山石碣网站建设招标  # 北京网站优化排名企业  # 国内推广代理网站平台  # 边缘  # 游戏开发  # 何为  # 转换为  # 可通过  # 如何实现  # 不支持  # 整型  # 递归  # AI-powered  # red 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读  微信如何设置字体大小_微信字体设置的阅读舒适  《杖剑传说》食谱大全  解决Go encoding/json 将JSON大数字解析为浮点数的问题  百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法  word文档行距怎么调?word文档调行距的操作步骤  基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口  抖音商城官网是什么_抖音商城官方网址与访问方法  喜茶GO更换登录账号方法  哔哩哔哩黑名单怎么查看  123网页端官方登录页 123邮箱网页版即时通讯服务  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树  管理打开的编辑器:固定、分组和关闭技巧  《虎扑》关闭社区内容推荐方法  12306售票时间最新规定 | 网上订票和车站窗口时间一样吗  食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗  《百果园》充值余额方法  京东快递包裹信息查询入口 京东快递官方查询平台入口  拷贝漫画2025网页版入口 拷贝漫画官网免费看全集  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  虫虫漫画排行榜单入口_虫虫漫画编辑推荐入口  mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法  荣耀magicv5怎么上手测评  iPhone16Plus参数配置如何调整声音_iPhone16Plus参数配置声音调整详细方法  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  TikTok视频播放中断怎么办 TikTok播放异常修复方法  《edge浏览器》关闭翻译功能方法  Word 2003字体大小设置方法  以下哪一项是古代兵书三十六计中的计谋  自定义你的VS Code状态栏,监控关键信息  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  告别阻塞等待:如何使用GuzzlePromises优雅处理PHP异步操作,提升应用响应速度  在VS Code中进行数据科学和机器学习开发  mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程  苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  mysql中外键约束如何使用_mysql FOREIGN KEY操作  Eclipse开发J*a快速入门  AO3官方镜像链接 | 最新防走失网址永久收藏  C#解析并修改XML后保存 如何确保格式与编码的正确性  Python中处理嵌套字典与列表的数据提取与过滤教程  实现二叉树的层序插入:基于树大小的路径导航  《淘宝联盟》推广自己的店铺方法  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】  消除网页顶部意外空白线:CSS布局常见问题与解决方案  4399小游戏下装链接 4399小游戏下载链接入口  Go反射进阶:访问内嵌结构体中的被遮蔽方法  yandex网页版直接登录 yandex官方入口平台访问方法 

 2025-11-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.