我有以下代码:
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')))。