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()函数将字符串转换为字符数组。

更新于:2022年10月19日

12K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告