C++ostringstream用法


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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM