2016-04-25 6 views
0

Я пытаюсь извлечь все числа из строки в том же формате строки. Следующий код извлекает числа, но не записывает последнюю строку из 4s. Как мне изменить регулярное выражение для повторной строки чисел?C++ regex parsing numbers from string

#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

Все, что я действительно делаю, это просто взять строку и сохранить каждую строку, как показано. поэтому в двойном массиве должно быть четыре вектора и отображать то же самое, что и в строке. должно быть 40 ints в каждой строке и 4 вектора сохранены. – kubuni

+1

Положите оператор 'if' после' ++ i; 'и повторите попытку. –

ответ

0

(я на самом деле не подсчитывали свои числа,. Я предполагаю, что они, как вы говорите)

Когда ваши концы петли, вы обработали все 40 чисел в последнем блоке, и они сидят в row. Если в вашем списке был еще один элемент, то непосредственно перед его обработкой содержимое row будет помещено в double_array. Но их нет, поэтому нет.

Вы можете исправить это, выполнив «у меня еще 40 предметов?», Если да, поместите их в double_array «тест после каждый элемент обрабатывается, а не раньше.