C++中使用stringstream簡化類型轉換


C++標准庫中的<sstream>提供了一個stringstream,以前基本沒用過,突然發現很好用(^-^)V

參見 http://www.cplusplus.com/reference/sstream/stringstream/

如果你打算在多次轉換中使用同一個stringstream對象,記住再每次轉換前要使用clear()方法;

在多次轉換中重復使用同一個stringstream(而不是每次都創建一個新的對象)對象最大的好處在於效率。stringstream對象的構造和析構函數通常是非常耗費CPU時間的。

如何用使用stringstream進行類型轉換:

1. 下面例子為整型和sting類型的相互轉換示例

整型轉換為字符串類型

string NumberToString(int num)
{
    stringstream ss;
    ss<<num;   //像流中傳值
    string result;
    ss>>result;  //將流中的值寫入到result
    return result;
}

字符創類型轉換為整型

int StringToNumber(string strNum)
{
    stringstream ss;
    ss<<strNum;
    int result;
    ss>>result;
    return result;
}

編譯期就確定了num,result,strNum的類型,調用stringstream的時候擁有足夠的信息判斷來進行自動轉換,並將轉換結果緩存到stringstream對象的內部緩沖中

stringstream對象會根據需要自動分配內存,不用擔心溢出問題.

例如:

float n = 22.22;
string strNum = "22.22";
cout<<StringToNumber(strNum)<<endl;
cout<<NumberToString(n)<<endl;

輸出:22 22

 

2. 任意類型的轉換

template <class output_type,class input_type>
output_type Convert(const input_type &input)
{
    stringstream ss;
    ss<<input;
    output_type result;
    ss>>result;
    return result;
}

例如:

float n = 22.22;
string strNum = "22.22";

float f = Convert<float>(strNum);
cout<<f<<endl;
string ss = Convert<string>(n);
cout<<ss<<endl;

輸出: 22.22 22.22

 

3. 自定義類型的轉換

<sstream>庫還提供了另外一個特性—可擴展性,你可以通過重載來支持自定義類型間的轉換,下次在探究


免責聲明!

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



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