如果没有循环遍历字符串,我如何从所述字符串中获取所有整数?字符串类方法?

时间:2017-02-13 01:28:07

标签: c++ regex string

规则我必须遵守

不要使用循环或字符数组来处理以下任何问题的字符串。使用字符串类的成员函数。您可以使用循环来读取文件并计算处理器数量。

一些提示

以下是一些您可能会觉得有用的功能:

  • 文件类:getline
  • String class:find,rfind,substr,length,c_str,constant npos
  • 混杂。功能:atoi,atof   (可能需要C ++的C标准库,即) isstringstream     (以上两种方法都是将字符串转换为数字的方法。)

以下是我需要提取的示例字符串:

--bz2

我可以通过两次相同的字符串。我想抓住46并存储它,然后为48做同样的事情。

我不确定最好的办法。有可能做这样的事情:

"46 bits physical, 48 bits virtual"

或者可能是正则表达式?我想我可以使用它,只要我不需要使用第三方库或类似的东西。

2 个答案:

答案 0 :(得分:0)

以下结果为我工作。

#include <sstream>

string myString = "hello 47";

int val;

istringstream iss (myString);

iss >> val;

cout << val << endl;

// The output of val will be 47.

答案 1 :(得分:0)

由于您在评论中指出允许使用STL,因此您可以使用依赖于STL算法的通用编程方法。例如,

#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>


int main()
{
    using namespace std;

    string haystack = "46 bits physical, 48 bits virtual";
    string result;

    remove_copy_if(begin(haystack), end(haystack),
                   back_inserter(result),
                   [](char c) { return !isspace(c) && !isdigit(c); } );
    cout << result;
}

您基本上将字符串中的字符视为输入流,从中过滤掉所有非数字字符并保留您要使用的分隔符字符。我的例子将空格作为分隔符。

以上给出了输出

  

46 48