我一直在尝试从irr::stringw(irrlicht游戏引擎核心字符串)转换,以便我可以简单地在定界符处爆炸该字符串以创建数组/列表。

但是,我无法从stringw转换,stringw与任何常规功能都不兼容。

因此,要将stringw拆分为一个列表,我需要以下内容:

vector<stringw> split(stringw str, char delimiter){
    vector<stringw> internal;
    std::string tok;
    std::string std_s(str.c_str(), str.size());

    while (getline(std_s, tok, delimiter)) {
        internal.push_back(tok);
    }
    return internal;
}

但是这里有错误:str.c_str()No instance of constructor "std::basic::string matches argument list. Argument types are (const wchar_t*, irr:u32)
关于getline方法的错误:No instance of overloaded function "getline" matches the argument list. Argument types are: (std::string, std::string, char).
数小时以来,我一直在尝试多种方法,以分隔符“;”分隔stringw。 (半冒号),但没有任何效果。有什么建议吗?

最佳答案

这里有两个主要问题,第一个是stringw是一串wchar_t字符。因此,我们需要使用std::wstring facilities以避免不得不将wchar_tchar进行相互转换。

我们还需要注意,std::getline需要从 std::basic_istream 派生的类型作为第一个参数。因此,我们可以按以下方式修改您的代码:

vector<stringw> split( stringw str, wchar_t delimiter )
{
    vector<stringw> internal;
    std::wstring tok;
    std::wistringstream std_s( str.c_str() );

    while( getline(std_s, tok, delimiter) ) {
        internal.push_back(tok);
    }
    return internal;
}

关于c++ - 无法从stringw转换为string/char,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32039091/

10-13 02:15