stringstream不能输入空格_vs2005
vs2005
当字符串带空格时,stringstream就在空格处截断了,上网查了一下,试了下面两种方法都不灵,一种是ss1.unsetf(std::ios::skipws);, 一种是ss2 >> std::noskipws >> str;
哪位知道还有更好的方法吗?
std::string str;
std::stringstream ss1;
ss1.unsetf(std::ios::skipws);
ss1 << "111 222";
ss1 >> str;
AfxMessageBox( str.c_str() );
std::stringstream ss2;
ss2 << std::noskipws << "aaa bbb";
ss2 >> std::noskipws >> str;
AfxMessageBox( str.c_str() );
std::string str = ss1.str()
char separator;//自己的分隔符
while(std::getline(ss1, str, separator))
{
//do something
}
template<class _Elem,
class _Traits,
class _Alloc> inline
basic_istream<_Elem, _Traits>& operator>>(
basic_istream<_Elem, _Traits>&& _Istr,
basic_string<_Elem, _Traits, _Alloc>& _Str)
{// extract a string
typedef ctype<_Elem> _Ctype;
typedef basic_istream<_Elem, _Traits> _Myis;
typedef basic_string<_Elem, _Traits, _Alloc> _Mystr;
typedef typename _Mystr::size_type _Mysizt;
ios_base::iostate _State = ios_base::goodbit;
bool _Changed = false;
const typename _Myis::sentry _Ok(_Istr); //这里也会跳过空格哦
if (_Ok)
{// state okay, extract characters
const _Ctype& _Ctype_fac = _USE(_Istr.getloc(), _Ctype);
_Str.erase();
_TRY_IO_BEGIN
_Mysizt _Size = 0 < _Istr.width()
&& (_Mysizt)_Istr.width() < _Str.max_size()
? (_Mysizt)_Istr.width() : _Str.max_size();
typename _Traits::int_type _Meta = _Istr.rdbuf()->sgetc();
for (; 0 < _Size; --_Size, _Meta = _Istr.rdbuf()->snextc())
if(_Traits::eq_int_type(_Traits::eof(), _Meta))
{// end of file, quit
_State
[解决办法]
= ios_base::eofbit;
break;
}
//跳过whitespace,noskipws对其不管用
else if (_Ctype_fac.is(_Ctype::space,
_Traits::to_char_type(_Meta)))
break;// whitespace, quit
else
{// add character to string
_Str.append(1, _Traits::to_char_type(_Meta));
_Changed = true;
}
_CATCH_IO_(_Istr)
}
_Istr.width(0);
if (!_Changed)
_State
[解决办法]
= ios_base::failbit;
_Istr.setstate(_State);
return (_Istr);
}