龙空技术网

C++中,字符串转换为数字的8种方法

CyberPunk 367

前言:

目前小伙伴们对“把string转成char”都比较关怀,朋友们都想要学习一些“把string转成char”的相关知识。那么小编在网络上汇集了一些有关“把string转成char””的相关文章,希望姐妹们能喜欢,朋友们一起来学习一下吧!

在C++中,将字符串转换为数字是一个常见的任务,特别是在处理用户输入或解析文件内容时。有多种方法可以实现这个转换,以下是几种常见的方法:

1. 使用 std::stoi 和 std::stol 等函数

C++11 引入了这些标准库函数,用于将字符串转换为整数类型。

#include <iostream>#include <string>int main() {    std::string str = "12345";    int num = std::stoi(str);    long num_long = std::stol(str);    long long num_llong = std::stoll(str);    std::cout << "int: " << num << std::endl;    std::cout << "long: " << num_long << std::endl;    std::cout << "long long: " << num_llong << std::endl;    return 0;}
2. 使用 std::stringstream

std::stringstream 提供了一种通用的方式来进行字符串与其他类型之间的转换。

#include <iostream>#include <sstream>#include <string>int main() {    std::string str = "12345";    std::stringstream ss(str);    int num;    ss >> num;    std::cout << "int: " << num << std::endl;    return 0;}
3. 使用 sscanf

sscanf 是一个 C 标准库函数,可以从字符串中读取格式化数据。在 C++ 中也可以使用。

#include <iostream>#include <cstdio>int main() {    std::string str = "12345";    int num;    sscanf(str.c_str(), "%d", &num);    std::cout << "int: " << num << std::endl;    return 0;}
4. 手动实现转换

手动转换字符串到整数可以让你更好地理解转换过程,并且在某些情况下可能会提高性能。这里是一个简单的实现示例:

#include <iostream>#include <string>int stringToInt(const std::string& str) {    int num = 0;    for (char c : str) {        if (c >= '0' && c <= '9') {            num = num * 10 + (c - '0');        } else {            throw std::invalid_argument("Invalid input string");        }    }    return num;}int main() {    std::string str = "12345";    try {        int num = stringToInt(str);        std::cout << "int: " << num << std::endl;    } catch (const std::invalid_argument& e) {        std::cerr << e.what() << std::endl;    }    return 0;}
5. 使用 Boost 库

如果你已经在项目中使用了 Boost 库,你可以利用它提供的转换功能。

#include <iostream>#include <boost/lexical_cast.hpp>int main() {    std::string str = "12345";    try {        int num = boost::lexical_cast<int>(str);        std::cout << "int: " << num << std::endl;    } catch (const boost::bad_lexical_cast& e) {        std::cerr << "Error: " << e.what() << std::endl;    }    return 0;}
6. 使用 atoi 和 atol 等函数

这些是 C 标准库函数,可以将 C 风格的字符串(const char*)转换为整数类型。

#include <iostream>#include <cstdlib>int main() {    const char* str = "12345";    int num = std::atoi(str);    long num_long = std::atol(str);    std::cout << "int: " << num << std::endl;    std::cout << "long: " << num_long << std::endl;    return 0;}
7. 使用 from_chars(C++17)

from_chars 是 C++17 引入的一种高效的方式用于解析数字。它不抛出异常,非常适合性能敏感的应用。

#include <iostream>#include <charconv>#include <string>int main() {    std::string str = "12345";    int num;    auto result = std::from_chars(str.data(), str.data() + str.size(), num);    if (result.ec == std::errc()) {        std::cout << "int: " << num << std::endl;    } else {        std::cerr << "Failed to convert string to int" << std::endl;    }    return 0;}
8. 使用 QVariant(如果使用 Qt 库)

在使用 Qt 库的项目中,可以利用 QVariant 的转换功能。

#include <iostream>#include <QString>#include <QVariant>int main() {    QString str = "12345";    QVariant variant(str);    bool ok;    int num = variant.toInt(&ok);    if (ok) {        std::cout << "int: " << num << std::endl;    } else {        std::cerr << "Failed to convert string to int" << std::endl;    }    return 0;}

以上是一些在 C++ 中实现字符串到数字转换的方法,每种方法都有其适用的场景和优缺点。

标签: #把string转成char