c++ stringstream 的clear()清空误区

在用c++写程序时,经常回需要将int or double 等类型转换成string。对于这个操作,我常使用的是stringstream。比如

int  a = 10;

stringstream s1;
s1 << a;
string a_str = a.str();

利用这个方法就可以将int类型a的值转换为string类型(同理,可以转换double,long等类型)。

如果你想要转换多个int/double等类型的变量,而又始终用一个stringstream对象(避免总是创建stringstream的开销),那么你就需要在再一次用stringstream之前将stringstream的内容清空。我们首先想到的是clear()方法。经查看stringstream果然有个clear()方法(好开心^.^),于是你就这么去应用stringstream了。

stringstream s1;
int a = 10;
double b = 2.8;

s1 << a;
string a_str = s1.str();
s1.clear();

s1<<b;
string b_str = s1.str();
s1.clear();

cout << "a_str:" << a_str << "\t b_str:" << b_str << endl;

结果竟然发现运行结果是这样!!

a_str:10 b_str:102.8

怎么回事!?  原来clear() 方法只是重置了stringstream的状态标志,并没有清空数据。如果需要清空数据,可以用是s1.str(“”)来实现这个目的。

谨记!不然很容易使你的程序出现错误,并且吃掉你的内存!

参考:http://blog.163.com/[email protected]/blog/static/1408083742012214104532291/

时间: 2024-07-31 03:28:31

c++ stringstream 的clear()清空误区的相关文章

Python3基础 dict clear 清空一个字典

? python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 conda : 4.5.11 type setting : Markdown ? code """ @Author : 行初心 @Date : 18-9-23 @Blog : www.cnblogs.com/xingchuxin @GitHub : github.com/GratefulHeartCoder """ de

Python3基础 使用clear() 清空一个字典

镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.------------------------------------------ code: dict1={'子':'鼠','丑':'牛','寅':'虎','卯':'兔','辰':'龙','巳':'蛇','午':'马','未':'羊','申':'猴','酉':'鸡','戌':'狗','亥':'猪'} print('子' in dict1.keys()) print('鼠

直接使用editbox.clear()清空时,有时会无法清除完全,此时有清空文本框的另一种方法

editbox = driver.find_element_by_id("id") editbox.click() content = editbox.get_attribute("text") driver.keyevent(123)#光标定位到末尾 for i in range(0,len(content)): driver.keyevent(67)#backspace

stringstream中的clear()与str()

今天在用stringstream做数据转换的时候,遇到了问题,发现得到的不是预期的结果. 简化的代码如下: #include <cstdlib> #include <iostream> #include <sstream> using namespace std; int main(int argc, char * argv[]) { stringstream stream; int a,b; stream<<"80"; stream&g

c++ primer(中文版第四版)第8章关于cin.clear(istream::failbit)的一个误区

抛出问题: 先附上书本中的例题程序代码 #include <iostream> int main(){ int ival; while (std::cin >> ival, !std::cin.eof()){ if (std::cin.bad()) throw std::runtime_error("IO stream corrupted"); if (std::cin.fail()){ std::cerr << "bad data, tr

stringstream函数

头文件  #include<sstream> stringstream是字符串流,被用来切分数据或转化类型 样例一(摘) 输入n,代表接下来输入n行资料,每行资料有不固定个数的整数(最多20个,不大于200个字元).输出每行的总数 输入: 3 1 2 3 20 17 23 54 77 60 111 222 333 444 555 666 777 888 999 输出: 6 251 4995 代码 #include<iostream> #include<string> #

sstream头文件-getline 函数 和 stringstream函数 和string的常见用法

#include <iostream> #include <string> #include <sstream> using namespace std; int main() { string line; while(getline(cin,line) { int sum = 0, x; stringstream ss(line); while(ss>>x) { sum += x; } cout << sum << endl; }

初探stringstream

stringstream 的用法就见代码吧: 1 ///string 转 int 2 int main() 3 { 4 string a="10"; 5 stringstream ss; 6 int n; 7 ss<<a; 8 ss>>n; 9 n+=5; 10 printf("%d\n",n); 11 return 0; 12 } 1 ///int 转 string 2 int main() 3 { 4 int n=120; 5 strin

使用stringstream格式化字符串

stringstream所在头文件为<sstream> 一般有如下常用功能: 1.安全格式化字符串 stringstream常用来安全的格式化若干个字符串,数值到一个缓冲区, 而不用担心溢出, 可以用来取代sprintf. 注:使用stringstream 将int or double 等类型转换成string,如果你想要转换多个int/double等类型的变量,而又始终用一个stringstream对象(避免总是创建stringstream的开销),那么你就需要在再一次用stringstre