C++ String::stof() 函数



C++ 的std::string::stof()函数用于将字符串转换为浮点数。此函数分析字符串,从字符串开头提取浮点值。如果转换成功,则返回浮点值;否则,将抛出invalid_argument异常。

语法

以下是 std::string::stof() 函数的语法。

float stof (const string&  str, size_t* idx = 0);
float stof (const wstring& str, size_t* idx = 0);

参数

此函数有两个参数,如下所述。

  • str − 表示包含浮点数表示形式的字符串对象。
  • idx − 指向 size_t 类型对象的指针,函数将其值设置为 str 中数值之后下一个字符的位置。

返回值

此函数返回与作为参数传递的字符串内容对应的浮点值。

示例 1

以下是用 C++ 使用 std::stof() 函数将字符串转换为浮点数的基本示例。

#include <string>
#include <iostream>
using namespace std;
int main() {
   string temperature = " 36.6";
   float bodyTemp = stof(temperature);
   cout << "Body temperature is " << bodyTemp << " degree Celsius" << endl;
   return 0;
}

输出

如果运行上述代码,它将生成以下输出。

Body temperature is 36.6 degree Celsius

示例 2

以下示例传递包含有效浮点数的子字符串,跳过初始文本。

#include <string>
#include <iostream>
using namespace std;
int main() {
   string mixedContent = "Height: 180cm";
   size_t pos;
   float height = stof(mixedContent.substr(7), & pos);
   cout << "Height = " << height << " cm " << endl;
   return 0;
}

输出

如果运行上述代码,它将生成以下输出。

Height = 180 cm

示例 3

在这个例子中,我们使用 C++ 中的 string::stof 转换单个字符串中的多个数字。

#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main() {
   string data = "3.14 1.618 2.718";
   vector < float > numbers;
   size_t pos = 0, prev_pos = 0;
   while ((pos = data.find(' ', prev_pos)) != string::npos) {
      numbers.push_back(std::stof(data.substr(prev_pos, pos - prev_pos), nullptr));
      prev_pos = pos + 1;
   }
   numbers.push_back(stof(data.substr(prev_pos), nullptr));
   for (float num: numbers) {
      cout << num << std::endl;
   }
   return 0;
}

输出

以下是上述代码的输出。

3.14
1.618
2.718        

示例 4

在这个例子中,我们给出了无效的输入,所以它会抛出 invalid_argument 异常,因为该字符串无法转换为浮点数。

#include <string>
#include <iostream>
using namespace std;
int main() {
   string invalidNumber = "abc123";
   try {
      float value = stof(invalidNumber);
      cout << "Value is: " << value << std::endl;
   } catch (const invalid_argument & e) {
      cout << "Invalid argument: " << e.what() << endl;
   }
   return 0;
}

输出

以下是上述代码的输出。

Invalid argument: stof          
string.htm
广告