21xrx.com
2024-12-22 20:05:36 Sunday
登录
文章检索 我的文章 写文章
C++如何提取字符串中的数字
2023-07-07 18:11:56 深夜i     --     --
C++ 字符串 提取 数字 算法

在C ++中,提取字符串中的数字是一项常见的任务,特别是当处理从文件或用户输入中读取的数据时。通常,字符串中包含数字和其他字符,而提取数字可能是计算或数据分析的重要一步。这篇文章将介绍一些方法来提取字符串中的数字。

1. 使用stringstream类

C ++提供了一个称为 stringstream 的类,可以将字符串转换为数字。 stringstream 类允许将字符串处理为单独的单词或标记,这对于提取数字非常有用。下面是一个使用 stringstream 类的示例代码:


#include <iostream>

#include <sstream>

#include <string>

int main() {

  std::string str = "abc123def456";

  std::stringstream ss(str);

  int num;

  while(ss >> num)

    std::cout << num << std::endl;

  

  return 0;

}

输出:


123

456

正如您在代码中看到的那样,我们使用了一个 stringstream 对象来处理字符串。读取 stringstream 对象时,将自动跳过非数字字符,并将数字读取为整数。这是一种简单的提取数字的方式。

2. 使用正则表达式

C++ 中的正则表达式库提供了一种非常灵活的方式来搜索和提取字符串中的数字。下面是一个使用正则表达式的示例:


#include <iostream>

#include <regex>

#include <string>

int main() {

  std::string str = "abc123def456";

  std::regex num_regex("\\d+");

  std::smatch matches;

  while(std::regex_search(str, matches, num_regex)) {

    std::cout << matches[0] << std::endl;

    str = matches.suffix().str();

  }

  return 0;

}

输出:


123

456

细节:

- \d+ 是一种正则表达式模式,表示将一个或多个数字与前面的文本匹配。

- std::regex_search 搜索字符串并提取匹配项的引用。

- matches.suffix() 返回当前匹配项之后的子串。这样可以继续在子串上进行搜索。

3. 手动解析字符串

如果您不想使用C ++的标准库,或者需要对字符串的特定部分进行提取,则可以手动解析字符串。下面是一个手动解析字符串的示例:


#include <iostream>

#include <string>

int main() {

  std::string str = "abc123def456";

  std::string num_str;

  int num;

  for (int i = 0; i < str.size(); ++i) {

    if (std::isdigit(str[i])) {

      num_str += str[i];

      if (i == str.size() - 1 || !std::isdigit(str[i + 1])) {

        num = std::stoi(num_str);

        std::cout << num << std::endl;

        num_str.clear();

      }

    }

  }

  return 0;

}

输出:


123

456

在这个示例中,我们手动遍历字符串并将数字字符附加到 num_str 中。如果我们找到一个非数字字符,或者我们达到了字符串的末尾,我们会将 num_str 转换为数字并进行输出。

总之,这里介绍了三种提取字符串中数字的方法。使用C ++的标准库(如 stringstream 类或正则表达式库)可以较快地获得结果,但是手动解析字符串可以更好地控制提取结果。根据您需要提取数字的情况,您可以选择最适合您的方法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复