C++.【轉】C++數實值型別與string的相互轉換

來源:互聯網
上載者:User

標籤:lin   tab   number   類型   name   convert   reference   names   syn   

1、C++數實值型別與string的相互轉換 - JohnGu - 部落格園.html(https://www.cnblogs.com/johngu/p/7878029.html)

2、

1.數實值型別轉換為string1.1使用函數模板+ostringstream

使用函數模板將基礎資料型別 (Elementary Data Type)(整型、字元型、實型、布爾型)轉換成string。

123456789101112 //ostringstream對象用來進行格式化的輸出,常用於將各種類型轉換為string類型//ostringstream只支援<<操作符template<typename T> string toString(const T& t){    ostringstream oss;  //建立一個格式化輸出資料流    oss<<t;             //把值傳遞如流中    return oss.str();  } cout<<toString(14.2)<<endl;  //實型->string:輸出14.2cout<<toString(12301)<<endl; //整型->string:輸出12301cout<<toString(123456789785)<<endl;//長整型->string:輸出123456789785cout<<toString(true)<<endl;  //布爾型->string:輸出1

  

1.2使用標準庫函數std::to_string()

std命令空間下有一個C++標準庫函數std::to_string(),可用於將數實值型別轉換為string。使用時需要include標頭檔<string>

函數原型申明如下:

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

  

2.string轉換為數實值型別2.1使用函數模板+ istringstream

stringstream在int或float類型轉換為string類型的方法中已經介紹過, 這裡也能用作將string類型轉換為常用的數實值型別。

1234567891011121314151617181920 #include <iostream> #include <sstream>    //使用stringstream需要引入這個標頭檔 using namespace std;  //模板函數:將string類型變數轉換為常用的數實值型別(此方法具有普遍適用性) template <class Type> Type stringToNum(const string& str){     istringstream iss(str);     Type num;     iss >> num;     return num;      int main(int argc, char* argv[])  {     string str("00801");     cout << stringToNum<int>(str) << endl;      system("pause");     return 0; 

  

2.2使用C標準庫函數

具體做法是先將string轉換為char*字串,再通過相應的類型轉換函式轉換為想要的數實值型別。需要包含標準庫函數<stdlib.h>。 
(1)string轉換為int32_t

12345 string love="77";int ilove=atoi(love.c_str()); //或者16位平台轉換為long intint ilove=strtol(love.c_str(),NULL,10);

  (2)string轉換為uint32_t

123456789 //str:待轉換字串//endptr:指向str中數字後第一個非數字字元//base:轉換基數(進位),範圍從2至36unsigned long int strtoul (const char* str, char** endptr, int base); #樣本string love="77";unsigned long ul;ul = strtoul(love.c_str(), NULL, 10);

  (3)string轉換為uint64_t

12 string love="77";long long llLove=atoll(love.c_str());

  (4)string轉換為uint64_t

123456 unsigned long long int strtoull (const char* str, char** endptr, int base); #樣本string love="77";unsigned long long ull;ull = strtoull (love.c_str(), NULL, 0);

  (5)string轉換為float或double

123 string love="77.77";float fLove=atof(love.c_str());double dLove=atof(love.c_str());

  (6)string轉換為long double

1 long double strtold (const char* str, char** endptr);

  

2.3使用C++標準庫函數

使用C++11引入的C++庫函數將string轉換為數實值型別,相應的庫函數申明於標頭檔<string>中。

名稱 原型 說明
stoi int stoi (const string& str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);
Convert string to integer (function template )
stol long stol (const string& str, size_t* idx = 0, int base = 10);
long stol (const wstring& str, size_t* idx = 0, int base = 10);
Convert string to long int (function template)
stoul unsigned long stoul (const string& str, size_t* idx = 0, int base = 10);
unsigned long stoul (const wstring& str, size_t* idx = 0, int base = 10);
Convert string to unsigned integer (function template)
stoll long long stoll (const string& str, size_t* idx = 0, int base = 10);
long long stoll (const wstring& str, size_t* idx = 0, int base = 10);
Convert string to long long (function template)
stoull unsigned long long stoull (const string& str, size_t* idx = 0, int base = 10);
unsigned long long stoull (const wstring& str, size_t* idx = 0, int base = 10);
Convert string to unsigned long long (function template)
stof float stof (const string& str, size_t* idx = 0);
float stof (const wstring& str, size_t* idx = 0);
Convert string to float (function template )
stod double stod (const string& str, size_t* idx = 0);
double stod (const wstring& str, size_t* idx = 0);
Convert string to double (function template )
stold long double stold (const string& str, size_t* idx = 0);
long double stold (const wstring& str, size_t* idx = 0);
Convert string to long double (function template)


形參說明: 
str:重載了string和wstring版本,表示被轉換的字串。

idx:表示一個size_t*的指標類型,預設為空白值。不為空白時,轉換成功時擷取第一個非數值字元的下標。一般情況下,因為它是直接char型指標把最後非數值字元的地址值和起始地址值相減,所以也表示成功轉換的字元數量,如”10”轉成功為數值10時,*idx的值為2。

base:表示轉換基準,預設是10進位。

參考文獻

[1]C++ Reference 
[2]strtoul.C++ Reference 
[2]strtoull.C++ Reference 
[3]strtold.C++ Reference

3、

4、

5、

C++.【轉】C++數實值型別與string的相互轉換

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.