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

启动你的职业生涯

通过完成课程获得认证

开始学习
广告