📜  如何从 cpp 中的字符串中获取数字 - C++ (1)

📅  最后修改于: 2023-12-03 15:37:54.116000             🧑  作者: Mango

如何从 cpp 中的字符串中获取数字 - C++

在 C++ 中,有时我们需要从字符串中获取数字,例如将一个字符串转换为整数或浮点数,本篇文章将介绍一些方法来实现这个操作。

使用 stoi() 转换为整数

要将字符串转换为整数,可以使用 C++11 中的 stoi() 函数。这个函数将一个值为字符串的参数转换为整数,并返回转换后的整数值。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "123";
    int num = stoi(str);

    cout << "num = " << num << endl;

    return 0;
}

输出:

num = 123

如果字符串中有非数字字符,stoi() 函数会抛出 invalid_argument 异常。如果转换后的结果超出了整数的范围,则会抛出 out_of_range 异常。

使用 stoll() 转换为长整型

如果你需要将一个字符串转换为长整型,可以使用 stoll() 函数。这个函数与 stoi() 函数类似,但是将字符串转换为长整型。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "1234567890123456789";
    long long num = stoll(str);

    cout << "num = " << num << endl;

    return 0;
}

输出:

num = 1234567890123456789

stoi() 函数一样,如果字符串中有非数字字符,stoll() 函数会抛出 invalid_argument 异常。如果转换后的结果超出了长整型的范围,则会抛出 out_of_range 异常。

使用 stod() 转换为双精度浮点型

如果需要将一个字符串转换为双精度浮点型,可以使用 stod() 函数,这个函数与 stoi()stoll() 函数类似,但是将字符串转换为浮点数类型。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "3.1415926";
    double num = stod(str);

    cout << "num = " << num << endl;

    return 0;
}

输出:

num = 3.14159

如果字符串中有非数字字符,stod() 函数会抛出 invalid_argument 异常。如果转换后的结果超出了双精度浮点型的范围,则会抛出 out_of_range 异常。

使用 stringstream 转换为任意类型

如果你需要将一个字符串转换为任意类型的值,可以使用 stringstream 类进行转换。stringstream 类提供了各种转换操作,包括将字符串转换为整数、浮点数和字符串。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
    string str = "123";
    stringstream ss(str);
    int num;
    ss >> num;

    cout << "num = " << num << endl;

    return 0;
}

输出:

num = 123

stoi()stoll()stod() 函数不同,使用 stringstream 类进行转换需要进行一些额外的步骤。首先,你需要创建一个 stringstream 对象并将字符串传递给它。然后,你可以使用 >> 运算符来将值从 stringstream 中提取出来,并将其存储在变量中。

总结

在 C++ 中,有许多方法可以从字符串中获取数字。我们可以使用 stoi()stoll()stod() 函数来转换为整数、长整型和双精度浮点型,也可以使用 stringstream 类进行转换。无论使用哪种方法,都需要注意异常处理和边界条件。