草庐IT

Stringstream

全部标签

c++ - std::stringstream 可以设置失败/坏位的方法?

我用于简单字符串拆分的一段常见代码如下所示:inlinestd::vectorsplit(conststd::string&s,chardelim){std::vectorelems;std::stringstreamss(s);std::stringitem;while(std::getline(ss,item,delim)){elems.push_back(item);}returnelems;}有人提到这会默默地“吞下”std::getline中发生的错误。当然,我同意是这样的。但我突然想到,在实践中这里可能会出现什么问题,我需要担心。基本上这一切都归结为:inlinestd::

c++ - 从 std::stringstream 读取 uint8_t 作为数字类型

我的理解是,从stringstream读取uint8_t是一个问题,因为stringstream将解释uint8_t作为char。我想知道如何从stringstream中读取uint8_t作为数字类型。比如下面的代码:#include#includeusingnamespacestd;intmain(){uint8_tui;std::stringstreamss("46");ss>>ui;cout打印出52。我希望它打印出46。编辑:另一种方法是从stringstream中读取一个string,然后将解决方案转换为uint8_t,但这破坏了nice链接属性。比如在我实际要写的代码中,经

C++ 复制一个流对象

我一直在尝试使用C++,但遇到了一个我不知道如何解决的问题。基本上,我发现您无法复制流(请参阅Whycopyingstringstreamisnotallowed?),这也适用于“包装”它们的对象。例如:我创建了一个类,其中包含一个类型为stringstream的数据成员。我创建了这个类的一个对象。我尝试复制对象,例如“TestObjt1;TestObjt2;t1=t2;”这会导致错误C2249:'std::basic_ios::operator=':noaccessiblepathtoprivatememberdeclaredinvirtualbase'std::basic_ios'

c++ - 对于字符串对象连接,stringstream 是否比字符串的运算符 '+' 更好?

比如我有两个字符串对象:stringstr_1,str_2。我想连接到他们。我可以使用两种方法:方法一:std::stringstreamss;//std::stringstr_1("hello");//std::stringstr_2("world");ss方法二:std::stringstr_1("hello");std::stringstr_2("world");conststd::stringdst_str=str_1+str_2;因为字符串的缓冲区是只读的,当你改变字符串对象时,它的缓冲区会被销毁并创建一个新的缓冲区来存储新的内容。那么方法一比方法二好吗?我的理解正确吗?

C++ std::stringstream operator<< 重载

我有以下类(class)(原型(prototype)):classToken{public://members,etc.friendstd::stringstream&operator运算符是这样实现的:std::stringstream&operator现在,我尝试像这样使用它:std::stringstreamout;Tokent;//initialization,etc.outVS给我报错,说 最佳答案 std::stringstream&operator应该是std::ostream&operator

c++ - 编码 : Premature Optimization or not? 时考虑内存碎片

我正在开发一个使用C++编写的大型服务器应用程序。该服务器可能需要运行数月而不重新启动。碎片在这里已经是一个可疑的问题,因为我们的内存消耗会随着时间的推移而增加。到目前为止,测量是将私有(private)字节与虚拟字节进行比较,并分析这两个数字的差异。我处理碎片化的一般方法是留待分析。我对一般性能和内存优化等其他事情也有同样的思考方式。您必须用分析和证明来支持更改。我在代码审查或讨论期间注意到很多,内存碎片是最先出现的事情之一。几乎就像现在对它产生了巨大的恐惧,并且有一个提前“防止碎片化”的大倡议。请求的代码更改似乎有利于减少或防止内存碎片问题。我倾向于立即不同意这些,因为它们对我来说

c++ - 如何读取动态大小的stringstream?

我想尝试使用stringstream进行作业,但我对它的工作原理有点困惑。我进行了快速搜索,但找不到任何可以回答我问题的内容。假设我有一个动态大小的流,我怎么知道什么时候停止写入变量?stringvar="2++asdf3*c";stringstreamss;ss>var;cout我的输出是:2++asdf3*cc我不确定为什么最后会有额外的“c”,尤其是因为_M_in_cur=0x1001000d7"" 最佳答案 你在最后得到了额外的c,因为你在执行提取后没有测试流是否仍然良好:while(ss)//testifstreamisg

C++:字符串流到 vector

我正在尝试将字符串流中的数据存储到vector中。我可以成功地这样做,但它会忽略字符串中的空格。我该怎么做才能将空格也插入vector中?谢谢!代码stub:#include#include#includeusingnamespacestd;intmain(){stringstreams;stringline="HELLOHELLO\0";stringstreamstream(line);unsignedchartemp;vectorvec;while(stream>>temp)vec.push_back(temp);for(inti=0;i 最佳答案

c++ - 双格式和字符串流格式

doubleval=0.1;std::stringstreamss;ss在VisualStudio调试器中,val的值为0.10000000000000001(因为无法表示0.1)。val使用stringstream转换时,strVal等于"0.1"。然而,当使用boost::lexical_cast时,生成的strVal是"0.10000000000000001"。另一个例子如下:doubleval=12.12305000012;在visualstudio下val显示为12.123050000119999,使用stringstream和默认精度(6)它变为12.1231。我真的不明白

c++ - 使用字符串流时如何停止 double 转换为科学计数法

我正在创建一个函数来返回小数位数和整数位数,并使用sstream将插入的typename数字转换为字符串。然而,当转换为字符串时,数字以科学计数法出现,这对于计算正常数字中的位数没有用。我怎样才能阻止这种情况发生在我下面的函数中?enum{DECIMALS=10,WHOLE_NUMBS=20,ALL=30};templateintNumbs_Digits(Tnumb,intscope){stringstreamss(stringstream::in|stringstream::out);stringstreamss2(stringstream::in|stringstream::out