如何读取多个 wstring 行?

How can I read multiple wstring lines?

是否可以读取多行国际字符?我可以用简单的 ascii 字符串做到这一点:

#include <iostream>
#include <string>

void main ()
{
    std::string text{};
    //I cannot use std::wcin in that manner
    //std::wcout << "Enter any arbitrary text terminated by an asterisk:" << std::endl;
    //std::wstring wtext{};
    //std::getline (std::wcin, wtext, '*');THIS SPECIFIC LINE DOESN'T COMPILE
    std::cout << "Enter any arbitrary text terminated by an asterisk:" << std::endl;
    std::getline (std::cin, text, '*');
}

如何使用支持国际字符的字符串类型实现相同的目的?

按照要求,我包含了无法编译的行。 我的疑问是:还有别的办法吗?

错误是:没有重载函数“std::getline”的实例匹配参数列表

已解决。请注意已接受的答案中存在 L 前缀 '*'。在我使用 wcinwstring(会产生编译错误的那个)对 std::getline 的注释掉调用中,我忘记使用 wchar_t 文字并使用了 char 文字代替。因此类型不匹配(stringcharwstringwchar_t 组成——又名宽字符)。要表示宽字符文字,需要添加 L 作为前缀,即 L'*'.

这里是一个使用 std::wstringstd::wcinstd::wcout

的例子

顺便提一下:you shouldn't mix std::cinstd::coutstd::cerrstd::wcinstd::wcoutstd::wcerr。如果您选择使用 std::wcin,请仅使用 std::wcinstd::wcoutstd::wcerr

编辑:如果你在 std::getline 中使用 std::wcin,所有参数都必须是宽的,因为 std::getline 只得到一个字符类型的模板参数,并多次使用它: 对于流、输出字符串和分隔符。

#include <iostream>
#include <string>

int main ()
{
    std::wstring text{};
    
    std::wcout << L"Enter any arbitrary text terminated by an asterisk:" << std::endl;
    std::getline (std::wcin, text, L'*');
}