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()函式將我們的字串轉換為字元陣列。

更新於:2022年10月19日

瀏覽量:594

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告