c++ - 无法从 stringw 转换为 string/char

标签 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()没有构造函数的实例“std::basic::string与参数列表匹配。参数类型是(const wchar_t*, irr: u32)

getline 方法上出现错误:没有重载函数“getline”的实例与参数列表匹配。参数类型为:(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/

相关文章:

c++ - 对 boost::system 的 undefined reference

javascript - 将不同 DIV 中的数字相加

c# - 代码执行是如何进入这个 'if' 语句的?

c++11 - 预期类型说明符 C++ 模板类

c++ - 如何检查类型是否提供具有算术类型的函数

c++ - 您如何将所有链接依赖项打包到一个 Linux 静态库中?

c++ - 预编译 v8 脚本以用于多个隔离

c++ - 如何在 OpenCL 中插入一组预计算函数?

c++ - 在 MFC C++ App 中实现外部 WINAPI 调用

c - 如何限制用户只能输入文字,不能输入数字?