C++11新特性- string的數(shù)值轉換函數(shù)
string是標準庫中最常用的類,說活躍在字符串處理的各種場景中。但是長期以來string和數(shù)值之間的轉換一直比較繁瑣。這種情況到C++11以后有了很大的改觀,因為標準庫中為string和數(shù)值的相互轉換提供了一套函數(shù)。
數(shù)值到string
函 數(shù)非常簡單明快,只需要一個函數(shù):to_string。但是實際上它是一組重載的函數(shù),分別對應從int,long,long long,unsigned int,unsigned long,unsigned long long,float,double,long double到string的轉換。
使用起來也非常簡單:
string?value?=?to_string(2.5);
string到數(shù)值
針對基本的數(shù)值類型,C++11提供了相應的轉換方法。
stoi:string 到 int
stol:? string 到 long
stoll:string 到 long long
stoul:sting 到 unsigned long
stoull:string 到 unsigned long long.
stof:string 到 float
stod:string 到 double
stold:string 到 long double.
以下是示例代碼:
?
string?value?=?to_string(2.5); int?iv?=?stoi(value); cout?<<?"iv="?<<?iv?<<?endl; double?dv?=?stod(value); cout?<<?"dv="?<<?dv?<<?endl;
內(nèi)容為"2.5"的字符串,轉換為整數(shù)以后結果是2,轉換為double以后的結果是2.5。
一切都是這么的簡單和自然。
string到數(shù)值轉換函數(shù)的第二個參數(shù)
如果觀察string到數(shù)值轉換函數(shù)的聲明,會發(fā)現(xiàn)這些函數(shù)的第二個參數(shù),例如stod的聲明:
double?stod?(const?string&??str,?size_t*?idx?=?0);
參數(shù)idx用于保管數(shù)值之后下一個字符的位置。利用這個參數(shù)帶回的結果,可以實現(xiàn)某些便利的處理,例如實現(xiàn)一個包含多個數(shù)值的string的連續(xù)轉換:
string?values("1.0,2.4,3.5,4.6,5.7"); while(values.size()>0){ ????string::size_type?sz; ????cout?<<?stod(values,?&sz)?<<?endl; ????if(sz?<?values.size()){ ????????values?=?values.substr(sz?+?1); ????} ????else{ ????????values.clear(); ????} }
string到數(shù)值轉換函數(shù)的第三個參數(shù)
從當轉換目標為整數(shù)時,可以通過第三個參數(shù)指定轉換的基數(shù),例如以下代碼的輸出結果就是256。
string?hex("100"); cout?<<?stoi(hex,?nullptr,?16);
作者觀點
數(shù)值也是字符串處理的常見內(nèi)容,有些C++11提供的這些函數(shù),可以在基本庫地范圍內(nèi)就實現(xiàn)數(shù)值和string的互轉,這無疑是強迫癥程序員的一個福音。