首页 > 解决方案 > 如何使用向量字符串制作 switch 语句?

问题描述

vector<string> cmdV = split(_cmd, " ");

switch (cmdV[0])
{

}

出于某种原因,它给了我错误:cmdV [0]中的“值必须具有整数或枚举类型”

标签: c++vectorswitch-statementconsole-application

解决方案


如果你真的想用 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
}

这里可能发生的是不同的字符串可能返回相同的值,但它应该可以工作。


推荐阅读