我同意約阿希姆。此外,使用back_inserter
,istream_iterator
和stringstream
,使您的生活更輕鬆閱讀您的文件時:
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
,string
和vector
。
現在,您可以使用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;
}
只有理論。當我可以讀取數字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