首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

stringstream不能输入空格_vs2005,该如何处理

2013-12-13 
stringstream不能输入空格_vs2005vs2005当字符串带空格时,stringstream就在空格处截断了,上网查了一下,试

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() );

有个老贴,跟我情况一样: http://bbs.csdn.net/topics/300197237 不过没答案
[解决办法]
他就是用来按空白符分词的,没有其他能力。
[解决办法]
如果要取出所有字符,使用
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);
}

[解决办法]
std::getline(ss1, str);
或者
str = ss1.str();

热点排行