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传递给该对象
- 创建一个整型变量xInt
- 使用插入运算符从ss将整数存储到xInt中
示例
#include <iostream> #include <sstream> using namespace std; int solve( string myString) { int x; stringstream ss( myString ); ss >> x; return x; } int main() { string aNumber = "5126"; int convNumber = solve( aNumber ); cout << "The given number is: " << convNumber << endl; cout << "100 more than the given number is: " << convNumber + 100 << endl; }
输出
The given number is: 5126 100 more than the given number is: 5226
在C++中使用sscanf()
与stringstream对象类似,一种类似的方法(也适用于C)是使用sscanf()函数。与普通的scanf()函数一样,它接受格式字符串和输入作为字符数组。现在从字符串中,它读取指定的值并将其插入到变量地址指向的给定变量中。查看sscanf()函数的语法。
语法
scanf ( <a string input>, <format string>, address(s) of variable );
算法
让我们看看算法来了解它是如何工作的。
- 以类似C的字符数组格式输入字符串x
- 使用sscanf()函数,参数为x、格式字符串和变量地址
- 变量值将直接从sscanf()函数存储。
示例
#include <iostream> using namespace std; int solve( string myString) { int x; sscanf( myString.c_str(), "%d", &x ); return x; } int main() { string aNumber = "215"; int convNumber = solve( aNumber ); cout << "The given number is: " << convNumber << endl; cout << "100 more than the given number is: " << convNumber + 100 << endl; }
输出
The given number is: 215 100 more than the given number is: 315
该程序的工作方式与之前的程序相同,但是有一点需要注意。sscanf()方法不接受类似C++的字符串对象。它接受类似C的字符数组。为此,我们使用了c_str()函数来将给定的字符串参数转换为类似C的字符数组。
在C++中使用stoi()
将字符串转换为整数的另一个快速简便的解决方案是使用“string”头文件中的stoi()函数。此函数以字符串对象作为输入,然后将其转换为等效的整数。
语法
#include <string> stoi ( >integer in string format> );
算法
- 将字符串对象x作为输入
- xInt = stoi( x )
- 从给定的字符串x返回xInt作为整型变量。
示例
#include <iostream> #include <string> using namespace std; int solve( string myString) { int x; x = stoi( myString ); return x; } int main() { string aNumber = "625"; int convNumber = solve( aNumber ); cout << "The given number is: " << convNumber << endl; cout << "100 more than the given number is: " << convNumber + 100 << endl; }
输出
The given number is: 625 100 more than the given number is: 725
此函数有一些变体,例如stol()用于转换为long,stof()用于转换为float,等等。
在C++中使用atoi()
atoi()与stoi非常相似,但它也适用于C。它接受字符数组格式的字符串。可以通过导入cstdlib库来访问它。否则,没有太大的区别。让我们看看语法。
语法
#include <cstdlib> atoi ( <integer in character array format> );
算法
- 以类似C的字符数组格式输入字符串对象x
- xInt = atoi( x )
- 从给定的字符串x返回xInt作为整型变量。
示例
#include <iostream> #include <string> using namespace std; int solve( string myString) { int x; x = atoi( myString.c_str() ); return x; } int main() { string aNumber = "1024"; int convNumber = solve( aNumber ); cout << "The given number is: " << convNumber << endl; cout << "100 more than the given number is: " << convNumber + 100 << endl; }
输出
The given number is: 1024 100 more than the given number is: 1124
结论
将字符串转换为整数有几种不同的方法。使用stringstream和sscanf()的前两种方法是将字符串转换为任何数据类型的通用方法,而无需更改任何处理过程,只有目标变量类型会有所不同。对于stoi()和atoi(),这些仅用于将字符串转换为整数。还有一些其他等效函数可以转换为其他数据类型。sscanf和atoi()是基于C的函数,它们不接受字符串对象。在使用它们之前,必须使用c_str()函数将字符串转换为字符数组。