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

在C++中,switch语句不支持直接对字符串进行匹配,因为switch只能作用于整型或可转换为整型的类型(如char、int、enum等),而字符串(如const char* 或 std::string)是复合类型,无法作为switch的判断条件。但可以通过一些技巧间接实现“字符串匹配”的效果。
将字符串映射为一个整型值(通常是枚举),再在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;}
如果字符串选项不多,直接用if-else if链更直观,避免过度设计。
if (cmd == "start") {
// 处理 start
} else if (cmd == "stop") {
// 处理 stop
} else if (cmd == "restart") {
// 处理 restart
} else {
// 未知命令
}
通过计算字符串的编译期哈希值,将其转换为整数,然后在switch中使用该哈希值。这种方法可以保持switch语法结构,但需注意哈希冲突。
Viggle AI Video
Powerful AI-powered animation tool and image-to-video AI generator.
115
查看详情
示例:编译期字符串哈希
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,但可通过以下方式实现类似功能:
基本上就这些,关键是根据实际场景选择合适方案。
以上就是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
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。