无法从stringw转换为string / char

时间:2015-08-16 19:33:09

标签: c++ string c++11 irrlicht

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

但是,我无法从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拆分为&#34 ;;&#34; (半冒号),但没有任何工作。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

这里有两个主要问题,第一个问题是stringw是一串wchar_t个字符。因此,我们需要使用std::wstring facilities来避免将wchar_t转换为char

我们还需要注意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;
}

答案 1 :(得分:1)

您是否尝试过使用std::wstring代替std::string

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(stringw(tok));
    }
    return internal;
}

编辑:您可能需要使用stringw构造函数,可能是这样的: stringw(tok)