当前位置:首页 C++ > 正文

C++提取字符串中的整数

作者:野牛程序员:2023-07-01 08:02:17 C++阅读 3326

要从一个字符串中提取整数,可以使用C++中的字符串处理和类型转换功能。以下是一个简单的示例代码,演示了如何提取字符串中的整数:

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

int main() {
    std::string input = "abc123def456";
    std::stringstream ss;
    ss << input;

    int number;
    std::string word;

    while (ss >> word) {
        if (std::stringstream(word) >> number) {
            std::cout << "Found number: " << number << std::endl;
        }
    }

    return 0;
}

在上面的代码中,我们首先创建了一个字符串 input,其中包含一些文本和整数。然后,我们创建了一个 std::stringstream 对象 ss,并将 input 字符串输入到该对象中。

接下来,我们使用一个循环来逐个读取 ss 中的单词。对于每个单词,我们尝试将其转换为整数,使用 std::stringstream(word) >> number 这一语句。如果转换成功,我们就找到了一个整数,并将其输出。

注意,在上述示例中,我们假设字符串中的整数是由空格或其他非数字字符分隔的。如果字符串中的整数没有明确的分隔符,你可能需要使用其他方法来提取整数。

此外,还要确保包含适当的头文件 #include <iostream>#include <string>#include <sstream>


还有其他方法可以从字符串中提取整数。以下是两种常用的方法:

1. 使用 std::stoi() 函数:

std::stoi() 是 C++ 中的一个函数,用于将字符串转换为整数。它接受一个字符串参数,并尝试将其转换为整数。如果转换成功,返回整数值;否则,抛出一个 std::invalid_argumentstd::out_of_range 异常。

以下是使用 std::stoi() 函数提取字符串中的整数的示例代码:

#include <iostream>
#include <string>

int main() {
    std::string input = "abc123def456";
    std::string numberString;
    int number;

    for (char c : input) {
        if (std::isdigit(c)) {
            numberString += c;
        } else if (!numberString.empty()) {
            number = std::stoi(numberString);
            std::cout << "Found number: " << number << std::endl;
            numberString.clear();
        }
    }

    if (!numberString.empty()) {
        number = std::stoi(numberString);
        std::cout << "Found number: " << number << std::endl;
    }

    return 0;
}

在上面的示例中,我们遍历字符串的每个字符。如果字符是一个数字,我们将其添加到 numberString 中。如果字符不是数字,并且 numberString 不为空,我们将其转换为整数,并输出找到的整数。

2. 使用正则表达式:

另一种提取字符串中整数的常用方法是使用正则表达式。C++ 提供了 <regex> 头文件,其中包含用于正则表达式操作的类和函数。

以下是使用正则表达式提取字符串中整数的示例代码:

#include <iostream>
#include <string>
#include <regex>

int main() {
    std::string input = "abc123def456";
    std::regex numberRegex("\\\\d+");
    std::smatch match;

    while (std::regex_search(input, match, numberRegex)) {
        std::string numberString = match.str();
        int number = std::stoi(numberString);
        std::cout << "Found number: " << number << std::endl;
        input = match.suffix();
    }

    return 0;
}

在上面的示例中,我们使用 std::regex 类创建了一个表示整数的正则表达式,即 \\\\d+。然后,我们使用 std::regex_search() 函数来查找字符串中与正则表达式匹配的子字符串。

每次找到一个匹配项后,我们将匹配的子字符串转换为整数,并输出找到的整数。然后,我们将输入字符串更新为匹配项之后的后缀,以便在下一次循环中继续查找匹配项。

无论使用哪种方法,都可以从字符串中提取整数。选择哪种方法取决于你的需求和个人偏好。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击