如何将 wstringstream 和 getline 与 wchar_t 一起使用?

How to use wstringstream and getline with 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,但是如果我可以将 getlinewchar_t.

一起使用,那就需要大量处理了

您的代码无法编译,因为 getline 要求分隔符和流使用相同的字符类型。您的字符串流 ss 使用 wchar_t,但 '|' 被编译器评估为 char.

解决方法是使用合适的character literal,像这样:

#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;
    }
}