2016-04-25 92 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」測試每個項目被處理,而不是之前處理。

相關問題