无法从 stringw 转换为 string / char
Cannot convert from stringw to string / char
我一直在尝试从 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
(分号)但没有任何效果。有什么建议吗?
您是否尝试过使用 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)
这里主要有两个问题,第一个是stringw
是一串wchar_t
个字符。所以我们需要使用 std::wstring
facilities 来避免必须转换 wchar_t
to/from 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;
}
我一直在尝试从 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
(分号)但没有任何效果。有什么建议吗?
您是否尝试过使用 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)
这里主要有两个问题,第一个是stringw
是一串wchar_t
个字符。所以我们需要使用 std::wstring
facilities 来避免必须转换 wchar_t
to/from 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;
}