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;}
立即学习“C++免费学习笔记(深入)”;
int main() { std::string input; std::cout << "Enter command: "; std::cin >> 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;}
立即学习“C++免费学习笔记(深入)”;
如果字符串选项不多,直接用if-else if链更直观,避免过度设计。
if (cmd == "start") {
// 处理 start
} else if (cmd == "stop") {
// 处理 stop
} else if (cmd == "restart") {
// 处理 restart
} else {
// 未知命令
}
通过计算字符串的编译期哈希值,将其转换为整数,然后在switch中使用该哈希值。这种方法可以保持switch语法结构,但需注意哈希冲突。
示例:编译期字符串哈希
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匹配的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号