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


相关推荐: J*a列表元素格式化输出教程  鲨鱼剧场app金币获取方法  睡觉时心跳快是什么原因 夜间心悸如何应对  如何用mysql实现客户反馈管理_mysql客户反馈数据库方法  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】  《绝区零》2.3前瞻|直播|内容介绍  《百果园》充值余额方法  金牛福袋获取攻略  《i莞家》修改昵称方法  mysql通配符能用于日志查询吗_mysql通配符在系统日志查询中的实际使用方法  优化Asyncio嵌套函数调度:使用生产者-消费者模式实现并发流处理  C++如何实现单例模式_C++线程安全的单例模式写法  tiktok国际版入口_tiktok官网网页版链接  键盘测试软件哪个好_键盘故障检测工具推荐  《飞猪旅行》购买汽车票方法  excel怎么计算平均值 excel平均函数*ERAGE使用教学  CSS如何控制元素外边距_margin实现布局间隔  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例  Win11如何分屏操作_Win11多窗口分屏技巧  知音漫客官网首页入口_知音漫客热门漫画推荐  汽水音乐车机版 汽水音乐车机版官方入口  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  123平台官方登录入口 123邮箱网页端在线沟通工具  Vue 3中独立响应式实例的创建与应用  性能与资源监视器快捷打开  win11如何诊断DirectX问题 Win11运行dxdiag工具排查显卡故障【排错】  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  解决异步Python机器人中同步操作的阻塞问题  pubmed数据库官方主页_pubmed学术论文查找官网直达  解决Pandas DataFrame高度碎片化警告:高效创建多列的策略  Win10通知横幅停留时间修改 Win10自定义通知显示时长【技巧】  263企业邮箱如何设置邮件转发功能  如何在vscode中关闭it环境  快手极速版在线体验区 快手极速版网页体验入口  《全民k歌》网页版最新登录入口一览  composer licenses 命令:如何检查项目依赖的许可证?  c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践  Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程  Composer reinstall命令重装损坏的包  2025考研成绩查询时间入口分享  苹果11如何更换iCloud账号_苹果11账号切换的具体步骤  Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  php如何实现多域名共享session_php存储session到redis与跨域读取配置  虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画  小红书网页版在线直达 小红书网页版免费登录入口  《下一站江湖2》大雪山加入方法  汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口  天天漫画2025最新入口 天天漫画永久有效登录入口 

 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.