2016-04-25 58 views
0

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

#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; 
} 
+0

准确的结果是什么? – Shafizadeh

+0

我真的在做的只是取出字符串并存储每一行​​,如图所示。所以,double数组中应该有四个向量,并且显示与字符串中相同的东西。应存储每行40个整数和4个向量。 – kubuni

+1

在'++ i;'之后放置'if'语句并重试。 –

回答

0

(我还没有真正算作你的号码。我猜想他们是像你说的)

当你的循环结束,你在最后一个块处理的所有40个数字和他们坐在在row。如果列表中还有一个项目,则在处理之前立即将row的内容放入double_array。但是没有,所以他们不是。

你可以通过执行“我有40件物品吗?如果是这样,把它们放在double_array”测试每个项目被处理,而不是之前处理。

相关问题