C++ stringstream写入跳过空白
我的印象是,未格式化的C++ stringstream写入跳过空白,c++,C++,我的印象是,未格式化的write()会将字节逐字复制到调用它的ostream。另一位用户也告诉我,写函数不会跳过任何内容。如果您在使用stringstream时遇到问题,请提问。” 然而,在最近使用stringstream的一些代码中,我发现情况并非如此 #include <iostream> #include <fstream> #include <sstream> #include <algorithm> #include <iterat
write()
会将字节逐字复制到调用它的ostream
。另一位用户也告诉我,写函数不会跳过任何内容。如果您在使用stringstream
时遇到问题,请提问。”
然而,在最近使用stringstream
的一些代码中,我发现情况并非如此
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <iterator>
int main()
{
{
const std::string msg = "This is a secret message!";
std::stringstream ss;
const int size = msg.size();
// ss << std::noskipws;
ss.write( reinterpret_cast<const char*>(&size),sizeof( size ) );
ss.write( msg.data(),msg.size() );
std::ofstream out( "secret.txt",std::ios::binary );
std::transform( std::istream_iterator<char>( ss ),std::istream_iterator<char>(),
std::ostream_iterator<char>( out ),[]( const char c ) { return c + 113; } );
}
{
std::stringstream ss;
std::ifstream in( "secret.txt",std::ios::binary );
std::transform( std::istream_iterator<char>( in ),std::istream_iterator<char>(),
std::ostream_iterator<char>( ss ),[]( const char c ) { return c - 113; } );
int size;
ss.read( reinterpret_cast<char*>(&size),sizeof( size ) );
std::string msg( size,'@' );
ss.read( &msg[0],size );
std::cout << "Decoded message is: " << msg << std::endl;
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
int main()
{
{
const std::string msg=“这是一条秘密消息!”;
std::stringstream-ss;
常量int size=msg.size();
//ss这与write
或stringstream
无关
读取字符时,std::istream_迭代器默认跳过空白(除非使用std::noskipws
或等效工具禁用),而std::istreambuf_迭代器
则没有。此外,std::istreambuf_迭代器
效率更高,因为它避免了每个字符构造和销毁一次sentry对象的开销
您过度设计了测试用例。请在编写后尝试std::string check=ss.str();
。