2014-05-19 91 views
0

我需要計算存儲在一個文本文件中的陣列,如逆轉的次數:(C++)從文本文件計數數組中的反轉,每行一個數組?

1 4 5 3 2 
2 1 4 3 
6 2 4 1 3 5 

我已經寫了兩個函數來計算的倒置,但他們採取數組作爲參數,就像這樣:

int merge_sort(int array[], int inferior_limit, int superior_limit) 

我現在的問題是如何讀取一次一行的文本文件,並將每行存儲到數組中以計算倒數。我想過使用二維數組,但每列的列數都不相同。我一直在使用getline,如也被認爲是:

while(std::getline(inFile,numbers)) 

不過,我不知道如何處理,使其不讀所有的數字跟隨它。任何幫助將不勝感激。

+2

難道你用C風格的數組的要求?畢竟你是用C++編程的,爲什麼不用'std :: vector'等等? – Rook

+0

你的問題不是很好,你問的是倒數,你顯然知道該怎麼做。你應該有(不)要求是從文件中讀取行。我在說(不),因爲那可能很快就會成爲一個重複的問題。 –

回答

2

您可以使用sstream從字符串

#include <sstream> 

while(std::getline(inFile,numbers)) { 
    std::vector<int> arr; 
    std::stringstream ss(numbers); 
    int temp; 
    while(ss >> temp) arr.push_back(temp); 
    // First argument of merge_sort would be &arr[0] 
    // size of array would be arr.size(); 
} 
0

這裏讀陣列是一個例子分配如何做。您可以使用代碼背後的想法。

#include <iostream> 
#include <sstream> 
#include <vector> 
#include <string> 
#include <numeric> 
#include <iterator> 
#include <functional> 

int main() 
{ 
    std::string record; 

    while (std::getline(std::cin, record)) 
    { 
     std::istringstream is(record); 
     std::vector<int> v((std::istream_iterator<int>(is)), 
          std::istream_iterator<int>()); 

     if (v.empty()) continue;      

     bool increase = true; 

     auto n = std::inner_product(std::next(std::begin(v)), std::end(v), 
            std::begin(v), size_t(0), 
            std::plus<size_t>(), 
            [&] (int x, int y) -> size_t 
            { 
             bool current = increase; 
             return ((increase = x >= y)^current); 
            }); 

     std::cout << n << std::endl; 
    } 

    return 0; 
} 

如果文件中包含的記錄

1 4 5 3 2 
2 1 4 3 
6 2 4 1 3 5 

那麼輸出將是

1 
3 
4 
相關問題