c++ string與int(其他的內部類型)轉換

基於C++11 的 string 轉換問題

如果你用的編譯器是基於最新的C++11標準,那麼string和其他類型轉換問題就變的很簡單,因爲中已經封裝好了對應的轉換方法:

標準庫中定義了to_string(val);可以將其它類型轉換爲string。

to_string這個函數還是很強大的!
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val)

還定義了一組stoi(s,p,b)、stol(s,p,b)、stod(s,p,b)等轉換函數,可以函數,可以分別轉化成int、long、double等.
stoi(s,p,b);stol(s,p,b);stoul(s,p,b);stoll(s,p,b);stoull(s,p,b);返回s的起始子串(表示整數內容的字符串)的數值,返回值的類型分別爲:int、long、unsigned long、long long、unsigned long long.其中b表示轉換所用的基數,默認爲10(表示十進制).p是size_t的指針,用來保存s中第一個非數值字符的下標,p默認爲0,即函數不返回下標.
stof(s, p); stod(s, p); stold(s, p); 返回s的起始子串(表示浮點數內容)的數值,返回值的類型分別是float、double、long double.參數p的作用與整數轉換函數中的一樣。

非數字開頭的會拋出std::invalid_argument異常。

int main()
{
    string a = "a123asd";
    uint32_t i = std::stoul( a );
    std::cout << i << std::endl;
    return 0;
}

數字開頭的則會把數字部分轉換.
p 表示轉換的個數。

int main()
{
    string a = "123asd";
    size_t p;
    uint32_t i = std::stoull( a, &p );

    std::cout << "i=" << i << "  p=" << p << std::endl;
    return 0;
}

結果:
i=123 p=3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章