我是靠谱客的博主 孤独黑猫,最近开发中收集的这篇文章主要介绍使用C++ ostringstream来格式化字符串输出,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在Linux C中,我们通常使用snprintf来格式化字符串输出,但是有一个问题,就是可能会频繁申请大的缓冲区,并且无法实现字符串的动态增加,比如你定义的字符缓存为100个字节,如果你格式化以后的内容超出了100个字节,那边后面的内容就无法看见. 所以一般来讲都为定义一个足够的字符缓冲,但这样的效率是很差的. 下面使用C++的ostringstream方式可以很轻松地搞定这些问题。

如果要重复使用一个ostringstream对象,并且需要在下次使用前清空缓冲区,则可以使用str()函数重设置缓冲区. 如:

ostringstream  osSql;
//first time
osSql<<"SELECT  COUNT(*) FROM t_XXXX";
...
clsConnection.Query( osSql );
....
//second time
osSql.str("");//重新使用一个空的缓冲区
osSql<<"INSERT INTO **********"<<  strBigText  ;
.......

这里说明几点:

1.在一个函数中重用ostringstream时,需要清空它,方法是ostr.str("")

2.获取格式化好的字符串, 通过ostringstream::str()函数就可以返回一个string对象, 调用string::c_str() 或string::data()函数就可以获得一个指向字符缓冲的char*变量.

下面给出一段示例代码

//g++ -g test_ostringstream.cpp -o test_ostringstream
//
#include <string>
#include <sstream>
#include <iostream>
#include <unistd.h>

using namespace std;

int main(int argc, char* argv[])
{
	ostringstream os;
	for(int i=0; i<10000; i++)
	{
	    os.str("");
		string s = "a";
        double d = i + 0.100;
        os << "The x is: "<< i << " " << s << " " << d;
		cout << os.str() << endl;

		if(i>0 && i%1000 == 0)
			usleep(10);
	}

	return 0;
}
运行截图如下:

参考文献

[1].C++ Primer第四版中文版 第258页

[2].http://zhilingluo.blog.hexun.com/12944836_d.html

[3].http://hi.baidu.com/gongziya/item/f395738a18dcbc53850fab03

最后

以上就是孤独黑猫为你收集整理的使用C++ ostringstream来格式化字符串输出的全部内容,希望文章能够帮你解决使用C++ ostringstream来格式化字符串输出所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部