开关数量不是整数

Syn*_*ity 0 c++ switch-statement

我有这个程序

int main()
{
    string valami = "-- .- .-. -.- ------ -- .- .-. -.-";
    from_morse_string(valami);
    return 0;
}

int from_morse_string(string input_morse_string)
{
    string morse_arr[1764];

    int j = 0;
    stringstream ssin(input_morse_string);
    while (ssin.good() && j < 1764)
    {
        ssin >> morse_arr[j];
        ++j;
    }

    for(int i = 0; i < j; i++)
    {
        switch(morse_arr[i])
        {
            case ".-" : cout << "a" << endl; break;
            case "-..." : cout << "b" << endl; break;
            case "-.-." : cout << "c" << endl; break;
            ...
            case "----." : cout << 9 << endl; break;
            case "-----" : cout << 0 << endl; break;
            default : cout << "it's contain invalid morse code";
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是一个简单的摩尔斯电码解码器,一个非常非常简单的程序,但当我想运行时,我得到这个错误信息:"开关数量不是一个整数"

有什么问题?我怎么解决呢?

Mik*_*our 11

有什么问题?

如错误所示,您只能使用switch整数,而不是字符串.

我怎么解决呢?

ifelse:

if (morse_arr[i] == ".-") {
    cout << "a" << endl;
} else if (morse_arr[i] == "-...") {
    cout << "b" << endl;
} // and so on
Run Code Online (Sandbox Code Playgroud)

或者使用查找表

std::map<std::string, char> morse_map = {
    {".-", 'a'},
    {"-...", 'b'},
    // and so on
};

auto found = morse_map.find(morse_arr[i]);
if (found == morse_map.end()) {
    cout << "invalid morse code\n";
} else {
    cout << found->second << endl;
}
Run Code Online (Sandbox Code Playgroud)