21xrx.com
2024-11-22 09:25:18 Friday
登录
文章检索 我的文章 写文章
C++如何提取字符串中的数字
2023-07-06 19:10:14 深夜i     --     --
C++ 提取 字符串 数字

C++是一种功能强大的编程语言,可以帮助我们处理各种数据类型,包括字符串和数字。在很多情况下,我们需要从字符串中提取数字来进行计算或其他操作。接下来,我们将介绍一些方法,可以帮助我们在C++中提取字符串中的数字。

方法一:循环遍历字符串

首先,我们可以使用循环遍历字符串中的每个字符,如果当前字符是数字,则将其添加到一个字符串中。一旦遇到非数字字符,我们将终止循环并返回提取出的数字字符串。

具体实现如下:


#include <iostream>

#include <string>

using namespace std;

string extractDigits(string input) {

  string digits = "";

  for (int i = 0; i < input.length(); i++) {

    if (isdigit(input[i])) {

      digits += input[i];

    } else

      break;

    

  }

  return digits;

}

int main() {

  string input = "abc123def";

  string digits = extractDigits(input);

  cout << digits << endl; // 输出 123

  return 0;

}

这种方法非常简单,但有一个显著的缺点:它只能提取连续的数字,如果字符串中数字与其他字符交错,则无法提取完整的数字。因此,我们需要另一种更通用且灵活的方法。

方法二:使用正则表达式

C++的regex库为我们提供了一种用于处理正则表达式的方式,可以轻松地匹配数字和其他模式。我们可以使用regex库的smatch类型,它允许我们以字符串向量的形式存储所有匹配的字符串。

具体实现如下:


#include <iostream>

#include <string>

#include <regex>

#include <vector>

using namespace std;

vector<string> extractDigits(string input) {

  vector<string> digits;

  regex pattern("\\d+");

  smatch match;

  while (regex_search(input, match, pattern)) {

    for (auto m : match) {

      digits.push_back(m.str());

    }

    input = match.suffix().str();

  }

  return digits;

}

int main() {

  string input = "abc123def45gh67ij8k";

  vector<string> digits = extractDigits(input);

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

    cout << digits[i] << endl; // 输出 123 45 67 8

  }

  return 0;

}

在这个例子中,我们使用正则表达式“\d+”匹配连续的数字,并使用while循环遍历整个字符串来提取所有匹配的数字。匹配后,我们使用match.suffix().str()来获取剩余的字符串并进行下一轮匹配。

这种方法非常强大和灵活,可以提取任意格式的数字,但需要熟练掌握正则表达式的知识。如果您对正则表达式不是很熟悉,建议先学习相关的知识。

总结

无论您选择使用哪种方法,都可以在C++中轻松地提取字符串中的数字。如果您的字符串中只包含连续的数字,请使用简单的循环遍历。如果您的字符串中包含复杂的数字形式,请使用正则表达式。希望本文可以对您有所帮助,谢谢阅读!

  
  

评论区

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