c++ - 如何将 wstringstream 和 getline 与 wchar_t 一起使用?
问题描述
我有一个以管道分隔的字符串,我想将它放入名为result
. 但是,它不会在getline
. 如果我删除 中的管道分隔符getline
,则它会编译:
#include <sstream>
using namespace std;
wstringstream ss(L"1,2,3|4,5,6|7,8,9|");
vector<wstring> result;
wstring substr;
while (ss.good())
{
getline(ss, substr, '|'); // <- this does not compile with wchar_t
result.push_back(substr);
}
如何使用getline
传入的wchar_t
字符串?我可以这样做WideCharToMultiByte
,但如果我可以getline
使用wchar_t
.
解决方案
您的代码无法编译,因为getline
要求分隔符和流使用相同的字符类型。您的字符串流ss
使用wchar_t
,但'|'
编译器将其评估为char
.
解决方案是使用适当的字符文字,如下所示:
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
wstringstream ss(L"1,2,3|4,5,6|7,8,9|");
wstring substr;
while (ss.good())
{
getline(ss, substr, L'|');
std::wcout << substr << std::endl;
}
}
推荐阅读
- angular - 如何输入两个路由参数,其中一个在 URL 之间进行导航,同时使用 Angular CLI 8+ 中的子路由使用 Angular Router
- php - Laravel PackageManifest.php:未定义索引:名称
- forms - Google Apps 脚本 - 提交 PDF 表单数据(图片)
- javascript - Jquery .remove() 仅在第二次点击时起作用
- random-forest - 对于大量缺失,插补与对随机森林可用子集进行训练相比有何优势?
- amazon-s3 - Dbutils() 命令抛出奇怪的权限异常
- c# - Windows 10 和 Visual Studio 2013 上的 DirectX 程序集参考
- batch-file - 批量写入文件
- scheme - 理解 let 的括号
- android - 如何在运行时更改实现