首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++正则表达式解析字符串中的数字

C++正则表达式解析字符串中的数字
EN

Stack Overflow用户
提问于 2016-04-25 09:15:01
回答 1查看 145关注 0票数 0

我正在尝试从同一行格式的字符串中提取所有数字。下面的代码提取数字,但不记录最后一行4。我应该如何更改我的正则表达式以获得重复的数字行?

代码语言:javascript
运行
复制
    #include <iostream>
#include <vector>
#include <string>
#include <regex>
using namespace std;

const string data  ="4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,"
"4,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,3,3,3,3,3,3,7,8,3,3,3,3,3,3,7,4,"
"4,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,6,1,1,1,1,1,1,5,6,1,1,1,1,1,1,5,4,"
"4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4";
int main() {
    regex e("[1-9]");
    sregex_token_iterator rit(data.begin(), data.end(), e);
    sregex_token_iterator rend;
    int i = 0;
    std::vector<std::vector<int>> double_array;
    double_array.reserve(4);
    std::vector<int> row;
    row.reserve(40);
    while(rit != rend)
    {
        if( i ==  40)
        {
            double_array.push_back(row);
            row.clear();
            row.reserve(40);
            i = 0;
        }
        row.push_back(stoi(rit->str()));
        ++i;
        ++rit;
    }

    for(auto & disp_row : double_array)
    {
        for(auto & c : disp_row)
        {
            cout<< c << " ";
        }
        cout << "\n";
    }
    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2016-04-26 06:29:35

(我实际上并没有计算您的数字;我假设它们如您所说的那样。)

当您的循环结束时,您已经处理了最后一个块中的所有40个数字,它们位于row中。如果列表中还有一个条目,那么在处理它之前,row的内容就会被放入double_array。但是没有,所以他们不是。

您可以通过执行“我有40个项目吗?如果有,请在每个项目处理之后而不是之前将它们放入double_array”测试来解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36830735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档