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


相关推荐: 如何在CSS中使用absolute实现登录弹窗居中_transform translate结合  虫虫漫画排行榜单入口_虫虫漫画编辑推荐入口  J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析  CDR如何复制交互式填充色  使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留  小米civi如何设置锁屏时间  Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明  《书耽》更换手机号方法  冬季去哪个城市旅游更有可能观测到极光  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】  Mac怎么关闭按键声音_Mac键盘打字音效设置  苹果自助维修计划支持哪些设备机型  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  Word 2003字体大小设置方法  曝《丝之歌》DLC有望开发!开发商还有神秘新企划  《猎聘》筛选猎头岗位方法  如何查询个人病历记录  《伊瑟》凶影追缉库卢鲁boss攻略  AngularJS动态内容中DOM元素查找的时序问题及$timeout解决方案  胃动力不足?试试这5个调理方法  智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  Go Template中优雅处理循环最后一项:自定义函数实践  《浙里办》电子发票开具方法  圆通快递官方入口不需要登录 在线查询入口快速查询  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  《淘票票》添加到苹果钱包教程  Go语言中方法与接收器:指针和值类型的调用机制详解  PHP页面重载时变量值不重置的实现方法  《宝可梦大集结》S4冠军之路开始时间介绍  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  在PySimpleGUI中实现键盘按键绑定按钮事件  小米手机屏幕失灵乱跳怎么办 屏幕触控问题自检与临时解决方法【应急】  C++ virtual析构函数作用_C++基类虚析构函数防止内存泄漏  《鹿路通》退余额方法  Golang如何使用gRPC拦截器实现日志收集_Golang gRPC拦截器日志收集实践  实现可重用自定义Python Range类  excel怎么计算平均值 excel平均函数*ERAGE使用教学  苹果SE如何开启单手模式_苹果SE单手操作功能  谷歌邮箱官方入口链接 谷歌邮箱网页版电脑端快速登录  ao3入口镜像地址 ao3镜像入口可靠跳转  j*a中ArrayBlockingQueue的使用  Win11怎么开启HDR_Windows 11显示器画质增强设置  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  百度识图图像分析 百度识图识别平台  vivo手机视频通话美颜怎么设置_vivo视频通话美颜开启方法  掌握Go App Engine项目结构与GOPATH:包管理与导入实践 

 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.