2013-10-07 229 views
0

問題是文本文件編輯中的數據。該文本文件包含五列。C++編輯文本文件

1 | 2 | 3 | 4 | 5 | 

1 2 4 4 1 
2 3 4 4 3 
3 4 5 0 0 

目標將是在4列和第5移動(值> 0)中列1和2的上方或跟進:

1 | 2 | 3 | 4 | 5 | 

1 2 4 0 0 
2 3 4 0 0 
3 4 5 0 0 
4 1 0 0 0 
4 3 0 0 0 

如何實現這個?有人可以告訴我一個例子如何用C++ std::vector做到這一點?

這將不勝感激。

+0

只有理論。當我可以讀取數字s1,s2,s3,s4,s5: \t添加到表t1值s1,s2,s3,0,0 \t添加到表t2值s4,s5,0,0,0 當表t2結束有0,0,0,0,0: \t刪除表t2最後一行 打印表t1 打印表t2 – user2404495

回答

2

我同意約阿希姆。此外,使用back_inserteristream_iteratorstringstream,使您的生活更輕鬆閱讀您的文件時:

vector<vector<double> > contents; 

/* read file */ 
{ 
    ifstream inFile("data.txt"); 
    for (string line; inFile; getline(inFile, line)) { 
     stringstream line_stream(line); 
     vector<double> row; 
     copy(istream_iterator<double>(line_stream), istream_iterator<double>(), 
      back_inserter(row)); 
     contents.push_back(row); 
    } 
} 

這將在整個文件讀入contents。您需要包括sstream,algorithm,iterator,iosrteam,fstream,stringvector

現在,您可以使用for循環輕鬆處理文件,並使用contents[i][j]訪問數字。如果我沒有理解你正確的,這是我想你想做的事:

/* process file */ 
unsigned int n = contents.size(); 
for (unsigned int i=0; i < n; ++i) { 
    vector<double> row(5, 0.); 
    bool add_row = false; 
    if (contents[i].size() >= 5) { 
     for (unsigned int j=3; j<4; ++j) { 
      double value = contents[i][j]; 
      contents[i][j] = 0.; 
      if (value > 0) { 
       add_row = true; 
       row[j-3] = value; 
      } 
     } 
     if (add_row == true) { 
      contents.push_back(row); 
     } 
    } 
} 

現在將文件寫入stdout,簡單地說:

/* write file */ 
for (unsigned int i=0; i < contents.size(); ++i) { 
    copy(contents[i].begin(), contents[i].end(), ostream_iterator<double>(cout, " ")); 
    cout << endl; 
} 
0

有一個向量的載體。對於每一行,將每個數字讀入一個子向量。然後寫出每個子向量的三個第一個值,然後寫出每個子向量的最後兩個值。

+0

我應該學習更多關於向量,你能提供一個例子嗎?那肯定很不錯。 – user2404495

+0

你可以從這裏開始http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4027/C-Tutorial-A-Beginners-Guide-to-stdvector-Part-1.htm –

+0

@ user2404495首先閱讀例如[this reference](http://en.cppreference.com/w/cpp/container/vector),然後做一些簡單的實驗(向vector中添加元素,移除元素,以不同的方式遍歷一個vector,使用不同的方式類型作爲基礎(包括複雜類))。 –