我有以下代码:

    std::string s = "\n\n\n\n+\n\n\n+";
    std::stringstream serializedDataStream(s);

    std::string plusCharacter, plusCharacter2;
    serializedDataStream >> plusCharacter ;
    cout << "plusCharacter "<<plusCharacter << "\n";
    serializedDataStream >> plusCharacter2 ;
    cout << "plusCharacter "<<plusCharacter2;

    //OUTPUT:
    //    plusCharacter +
    //    plusCharacter +

这意味着stringsteam >>运算符跳过了新行。我查看了std::stringstream文档,但找不到导致这种情况的解释。这是编译器的特定行为,还是我可以依靠它?

最佳答案

发生这种情况是因为operator>>充当格式化的输入函数。格式化输入函数的部分过程是:



noskipws设置为false(并且流上的skipws标志为true,这是默认值)时,sentry对象“提取并丢弃每个字符,只要下一个可用的输入字符c是空格字符即可。”

如果您想一次阅读每一行,请使用std::getline。此函数的行为与未格式化的输入函数相同,其noskipws设置为true并读取一行文本(由行终止符定义(std::getline()的参数3(默认为'\n')))。

09-08 04:13