C++程式:將字串轉換為浮點數
C++使用靜態型別。編寫程式必須使用特定型別定義變數。有時需要從控制檯或檔案中讀取輸入。在這種情況下,程式會獲得字串資料。需要特殊的運算才能將其轉換為其他資料型別。本文將介紹C++中將字串轉換為浮點數的方法。這可以通過幾種不同的方法來實現。讓我們分別探討每種方法。
在C++中使用stringstream
流在C++中是一個強大的工具。例如檔案流、標準輸入/輸出流等。還有一種叫做stringstream的流。它類似於其他流,接受字串作為輸入。為了使用stringstream,我們必須匯入sstream標頭檔案。可以使用插入運算子(>>)或提取運算子()來檢索流資料。
語法
#include < sstream > stringstream streamObject ( <a string input> );
要使用流讀取特定型別的輸入,語法如下所示:
語法
<data type> variable; streamObject >> variable;
演算法
讓我們看看演算法來了解其整體工作原理。
- 將字串物件x作為輸入
- 建立一個stringstream物件,例如ss,並將x傳遞到物件中
- 建立一個浮點型變數xFloat
- 使用插入運算子從ss將浮點數儲存到xFloat中
示例
#include <iostream> #include <sstream> using namespace std; float solve( string myString) { float x; stringstream ss( myString ); ss >> x; return x; } int main() { string aNumber = "3.14159"; float convNumber = solve( aNumber ); cout << "The given number is: " << convNumber << endl; cout << "6.5 more than the given number is: " << convNumber + 6.5 << endl; }
輸出
The given number is: 3.14159 6.5 more than the given number is: 9.64159
從這個例子中可以明顯看出,數字是從字串物件中檢索的。並且由於這是實際的浮點資料,我們可以用浮點表示法將6.5加到自身並顯示結果。
在C++中使用sscanf()
一種類似的方法(在C中也適用)是使用sscanf()函式。與標準scanf()函式一樣,此函式接受字元陣列作為輸入和格式字串。現在它從字串中讀取所需的值,並將其附加到變數地址所指向的變數中。檢視sscanf()函式的語法。
語法
scanf ( <a string input>, <format string>, address(s) of variable );
演算法
讓我們看看演算法來了解其整體工作原理。
- 以類似C的字元陣列格式將字串x作為輸入
- 使用sscanf()函式,引數為x、格式字串和變數地址
- 變數值將直接從sscanf()函式儲存。
示例
#include <iostream> #include <sstream> using namespace std; float solve( string myString) { float x; sscanf( myString.c_str(), "%f", &x ); return x; } int main() { string aNumber = "6.8"; float convNumber = solve( aNumber ); cout << "The given number is: " << convNumber << endl; cout << "2.5 more than the given number is: " << convNumber + 2.5 << endl; }
輸出
The given number is: 6.8 2.5 more than the given number is: 9.3
應用程式的工作方式與之前完全相同,但是我們需要注意一些事情。sscanf()方法不支援類似C++的字串物件。它需要類似C的字元陣列。為此,我們使用c_str()方法將提供的字串引數轉換為類似C的字元陣列。
在C++中使用stof()
從“string”標頭檔案中使用stof()方法是將字串轉換為整數的另一種快速簡便的方法。此函式接收字串物件作為輸入,然後將其轉換為相應的浮點數。
語法
#include <string> stof ( <integer in string format> );
演算法
- 將字串物件x作為輸入
- xFloat = stof(x)
- 從給定的字串x返回xFloat作為浮點型變數。
示例
#include <iostream> #include <sstream> using namespace std; float solve( string myString) { float x; x = stof( myString ); return x; } int main() { string aNumber = "6.8"; float convNumber = solve( aNumber ); cout << "The given number is: " << convNumber << endl; cout << "2.5 more than the given number is: " << convNumber + 2.5 << endl; }
輸出
The given number is: 6.8 2.5 more than the given number is: 9.3
在C++中使用atof()
雖然atof()在C中也可以使用,但它與stof非常相似。可以使用字元陣列格式提交字串。透過匯入cstdlib庫,您可以訪問它。否則,沒有真正的區別。讓我們看看語法。
語法
#include <cstdlib> atof ( <floating number in character array format> );
演算法
- 以類似C的字元陣列格式將字串物件x作為輸入
- xFloat = atof(x)
- 從給定的字串x返回xFloat作為浮點型變數。
示例
#include <iostream> #include <sstream> using namespace std; float solve( string myString) { float x; x = atof( myString.c_str() ); return x; } int main() { string aNumber = "8.9"; float convNumber = solve( aNumber ); cout << "The given number is: " << convNumber << endl; cout << "6.5 more than the given number is: " << convNumber + 6.5 << endl; }
輸出
The given number is: 8.9 6.5 more than the given number is: 15.4
結論
將字串轉換為浮點數的方法有很多種。前兩種方法,使用stringstream和sscanf(),是將字串轉換為任何資料型別的通用方法,無需更改其他任何內容;唯一會改變的是最終變數的型別。這些函式stof()和atof()僅用於將字串轉換為浮點數。轉換為不同資料型別的其他函式與此類似。由於它們是基於C的函式,所以sscanf和atof()不接受字串物件。在使用它們之前,我們必須使用c_str()函式將我們的字串轉換為字元陣列。