使用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来格式化字符串输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Ubuntu 14.04 64bit上
- 下一篇: 使用C++ stringstream来进