微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何将 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 但如果我可以将 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;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。