2015-10-27 57 views
-2

我正在爲我的課程開發一個項目,我必須使用全部四種算法來處理最大子數組子問題(三次,二次,線性和遞歸)。我的問題是,我應該從一個文件讀取輸入,而且我很難找出如何讀取直到行結束,執行代碼與數據,然後移動到下一行。輸入文件看起來是這樣的:需要幫助從文件讀取直到行尾

2 
-5 -10 -2 -4 
2 
-2 10 -5 -6 
3 
-10 -5 0 5 -20 20 -50 
4 
10 8 2 -20 -50 -100 -150 
0 
-1 -2 -3 -4 -5 
1 
-100 -200 0 
4 
200 500 -700 1000 2000 -5000 4 10 
4 
100 200 
6 
0 0 0 0 0 0 -10 
5 
-4 10 -3 200 500 -700 2 
0 
5 10 15 20 25 30 35 
2 
10 30 50 70 100 
3 
-15 16 23 -30 0 -2 13 8 6 0 -4 -15 
12 
9 8 23 -1 -23 -4 0 0 4 7 9 10 -23 68 1 -2 -3 -6 -19 10 5 1 1 2 4 3 -46 12  -100 78 -23 0 0 12 2 7 
5 
-1 -3 0 2 3 6 1 -5 -3 -2 

現在我的問題是,我希望能夠在一個單一的數字閱讀(最小的子數組的長度),然後填充它下面的數字排的陣列,然後使用該數據執行所有四種算法,然後我想繼續下一個最小子數組長度和下一個數組值,執行所有四種算法等等,我希望能夠一次完成這一切。例如,我想讀取2作爲最小子數組長度,然後使用(-5,-10,-2,-4)作爲數組,執行所有四種算法,然後使用2作爲最小長度, (-5,10,-5,-6)作爲數組,執行所有四種算法,並一直執行,直到文件結束。

+0

零努力解決由OP結果顯示的問題,零努力解決給定的問題由我。對不起。這裏有一些非隨機的關鍵字來幫助你開始:'std :: getline','std :: stringstream','while(sstream >> number)' – user4581301

+0

使用** getline **方法一次獲得整行,在交替行上使用** strtok **來根據空格分割行 – CrakC

+0

@CrakC'strtok'是一種破壞性函數,它不會將std :: string與字符串複製到char數組並且使用'std :: getline'與std :: string以外的任何東西都是非常不好的想法。 – user4581301

回答

0

下面是一個簡單可行的解決方案,可以幫助(「test.txt的」包含你的價值......)

#include <fstream> 
#include <iostream> 
#include <sstream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    ifstream in("test.txt"); 

    string str; 
    int value; 

    while (in) 
    { 
     vector<int> vec; 

     getline(in, str); 
     stringstream stream(str); 

     while (stream) 
     { 
      stream >> value; 
      vec.push_back(value); 
     } 
     vec.erase(vec.end()-1); 

     //Here the vec conntains all values of the current line 
     for (auto v : vec) 
      cout << v << " "; 
     cout << endl; 
    } 
} 
+0

失敗,因爲'while(in)'在進行讀取之前測試流的有效性。 [變種這個。](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)而是使用'while(getline(in,str))'和'while(stream >> value)'代替while(流)' – user4581301