C 中使用靜態型別。為了編寫程序,變數必須定義為特定類型。有時必須讀取來自控制台或檔案的輸入。在這種情況下,程式被賦予字串資料。需要特殊操作才能將它們轉換為其他資料類型。本文將提供將字串轉換為浮點整數的 C 方法。可以使用幾種不同的方法來實現此目的。分別探索它們中的每一個。
流是C 中的一個很棒的工具。檔案流、標準輸入/輸出流等都是這些流的例子。 stringstream是一個不同的流存在。它透過接受一個字串作為輸入來進行操作,類似於其他流。我們必須導入sstream頭檔才能使用stringstream。可以使用插入運算子(>>)或提取運算子(
#include < sstream > stringstream streamObject ( <a string input> );
要使用流讀取特定類型的輸入,語法如下 -
<data type> variable; streamObject >> variable;
讓我們看看演算法以了解其整體工作原理。
#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()函數。此函數接受一個字元陣列作為輸入和格式字串,就像標準的scanf()函數一樣。現在它從字串中讀取所請求的值,並將其附加到由變數的位址指向的變數上。請查看sscanf()函數的語法。
scanf ( <a string input>, <format string>, address(s) of variable );
讓我們看看演算法以了解其整體工作原理。
#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 的字元陣列。
使用「字串」頭檔中的 stof() 方法是將字串轉換為整數的另一種快速而簡單的方法。此函數在接收到字串物件作為輸入後將其轉換為對應的浮點數。
#include <string> stof ( <integer in string format> );
#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
儘管 atof() 在 C 語言中也可用,但它與 stof 相當。可以使用字元數組格式提交字串。透過導入cstdlib庫,你就可以得到它。否則,就沒有真正的區別。讓我們檢查一下語法。
#include <cstdlib> atof ( <floating number in character array format> );
#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() 函數將字串轉換為字元陣列。
以上是將以下內容翻譯為中文:C++程式將字串轉換為浮點數的詳細內容。更多資訊請關注PHP中文網其他相關文章!