0
点赞
收藏
分享

微信扫一扫

C++ ostringstream


实现字符串流的处理,便于数字和字符串之间的自由转换;

一、使用stringstream对象简化类型转换

C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性、类型安全和可扩展性。

//string to int 

string result="11";
int n=0;
stream<<result;

//n=11
stream>>n;

double型转为string型,并指定输出小数点的位数

std::string DoubleToString(const double t, const int nPrecision = -1)
{
std::ostringstream oss;
if (nPrecision > -1)
{
oss.precision(nPrecision); //设定小数点后的精度
}
oss << std::fixed << t;
return oss.str();
}

注意:

重复利用stringstream对象

如果你打算在多次转换中使用同一个stringstream对象,记住再每次转换前要使用clear()方法;

在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的。

二、ostringstream 转换为 string 与 c字符串

std::stringstream stream;
int first, second;
stream<< "111"; //插入字符串
stream >> first; //转换成int
std::cout << first << std::endl;
stream.clear(); //在进行多次转换前,必须清除stream
stream << true; //插入bool值
stream >> second; //提取出int
std::cout << second << std::endl;

样例:

#include <iostream>
#include <sstream> // ostringstream 类型
#include <strstream>// ostrstream 类型
#include <string>
using namespace std;


void ostreamToChar(std::ostream& os) {
char* a = { (char*)"" };

//std::ends 是字符串的结束符, 以免内存泄露!
os << a << std::ends;
}

// int all type
void ostreamToString(std::ostream& os) {
std::string a = "ssss";
int c = 11;
double d = 11.334;
os << " c: " ;
os << c << endl;
os << " d: ";
os << d << endl;
os << " a ";
os << a;
}

int main(void) {

string outStr;
ostringstream out;

ostreamToString(out);
outStr = out.str();
cout << outStr << endl;;

return 0;
}

输出:

 c: 11
 d: 11.334
 a ssss
请按任意键继续. . .

举报

相关推荐

0 条评论