c++ - 如何使用向量字符串制作 switch 语句?
问题描述
vector<string> cmdV = split(_cmd, " ");
switch (cmdV[0])
{
}
出于某种原因,它给了我错误:cmdV [0]中的“值必须具有整数或枚举类型”
解决方案
如果你真的想用 a 中的值创建一个 switch 语句,vector<string>
你可以使用atoi()
或std::stoi()
。此答案中有更多描述:如何将 std::string 转换为 int?.
以下代码应该可以工作:
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> test;
test.push_back("2");
switch(std::stoi(test[0])) {
case 1:
std::cout << "IT WORKS!";
break;
case 2:
std::cout << "IT WORKS 2!";
break;
}
}
它应该打印"IT WORKS 2!"
没有错误。
或者,如果您希望字符串std::string str = "Test"
成为其中一种情况,您可以使用上一个问题中的答案:
enum string_code { eFred, eBarney, eWilma, eBetty, ... }; string_code hashit (std::string const& inString) { if (inString == "Fred") return eFred; if (inString == "Barney") return eBarney; ... } void foo() { switch (hashit(stringValue)) { case eFred: ... case eBarney: ... } }
注意:您应该阅读一些内容并确保您了解这样做可能会出现的错误。并阅读不同的数据类型,否则可能会出现这样的错误:将字符串转换为 int C++ 的错误结果
编辑:正如@theOtherMichael在下面的评论中提到的,上面的代码不是“真正的”散列方法。但是正如在这篇文章中发现的那样,有一种方法可以使用相同的想法但实际上散列值。
constexpr unsigned int hash(const char *s, int off = 0) { return !s[off] ? 5381 : (hash(s, off+1)*33) ^ s[off]; } switch( hash(str) ){ case hash("one") : // do something case hash("two") : // do something }
这里可能发生的是不同的字符串可能返回相同的值,但它应该可以工作。
推荐阅读
- javafx - 带有 2 个 GridPane 的 Javafx BorderPane,第二个 GridPane 未显示
- sql - 将单列单行 XML 数据转换为 SQL 表
- c++ - 控制到达非空函数的结尾 -wreturn-type
- asp.net-mvc - 通过 POST 发送多选
- reactjs - Heroku 在部署时给出应用程序错误
- java - 延迟一段时间后执行任务,如果遇到无限循环则停止
- azure-devops - Azure DevOps 管道从 UI 输入变量值
- preact - preact-cli 项目在添加 react-ga 时显示“无法解析 'react'”(别名问题)
- c++ - How can I check if Google services are blocked for my current user?
- javascript - How to stop the slider from resetting to the left side on mouse release (react-spring react-use-gesture)