C++ostringstream用法
阿新 • • 發佈:2021-10-06
ostringstream用法
1.型別轉換
要求包含標頭檔案
字串和int之間的互相轉換;
int num = 100;
string str = "";
std::ostringstream oss;
oss << num;
oss >> str; //str結果為"100";
可用於自定義型別轉換,類之間轉換;
class A
{
int a;
}
class B
{
int b;
}
A a;
B b;
std::ostringstream oss;
oss << a;
oss >> b; //str結果為"100";
可以寫成泛型類同來互轉;
template<class T> void to_string(string& result,const T& t) { std::ostringstream oss; oss<<t; result = oss.str(); } //呼叫端 std::string str; to_string(str,3.1415926); to_string(str,false); //兩種型別之間轉換 template<class out_type,class in_value> out_type convert(const in_value & t) { std::stringstream stream; stream<<t;//向流中傳值 out_type result;//這裡儲存轉換結果 stream>>result;//向result中寫入值 return result; } double d; string s="12.56"; d=convert<double>(s); //d等於12.56 s=convert<string>(9000.0);
2.代替sprintf拼接字串
通常我們字串拼接使用兩種方式:
1.直接string相加,這種是很方便但是會造成記憶體碎片;
2.sprintf,這種第一個引數是char陣列,不好判定長度的情況下,導致我們開很大的無用空間;
ostringstream恰好可解決這種問題:
std::ostringstream oss; int a = 100; std::string result; oss << "aaa" << a; result = oss.str(); std::cout << result; std::cout << std::endl; std::string str = "score:"; int score = 100; char buff[100]; sprintf_s(buff, "score:%d", 100); std::cout << buff;
輸出結果:
3.使用ostringstream好處
1.不需要開多餘的記憶體,不用擔心緩衝區溢位;
2.一個作用域內,一個流可以重複使用,不需要重新建立;但是用之前需要clear();