看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 將矩陣部分的位置移動 原矩陣長類似這樣: aaaaaabbbbbbccccccdddddd...... aaaaaabbbbbbccccccdddddd...... aaaaaabbbbbbccccccdddddd...... aaaaaabbbbbbccccccdddddd...... 希望得到的正確結果: 「印出來的時候」(也就是矩陣本身的值應該不需有變動) 讓矩陣 橫的 六個一數 移動如下圖 aaaaaa aaaaaa aaaaaa aaaaaa bbbbbb bbbbbb bbbbbb bbbbbb cccccc cccccc cccccc cccccc dddddd dddddd dddddd dddddd . . . . 程式跑出來的錯誤結果: 一個一個迴圈慢慢試的結果是 如果不管最外面一層可以跑出a的部分,但其它會空白, 這是想像中的狀況。 ......然而加上了外面一層迴圈就會印出一片空白 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC++ 有問題的code: (請善用置底文標色功能) 有問題的應該是綠色的迴圈部分(?) /*** 前略 這是用vector<vector <string>>的物件來讀入csv檔的程式***/ /*** 正常的印出原本的矩陣元素位置沒有問題 ***/ #include<iostream> #include<fstream> #include<string> #include<vector> #include<stdlib.h> #include<stdio.h> using namespace std; vector<string> splitEx(const string& src, string separate_character); //其實就是split void main() { ifstream f_in("train-hw4.csv"); ofstream f_out("output.csv"); if(!f_in) { cout << "無法讀入檔案\n"; return ; } if(!f_out) { cout << "無法輸出檔案\n"; return ; } string line ; vector <vector <std::string>> csv_data; vector <string> token; vector <int> size_t; vector <int> size_c; int i = 0, j = 0 , count = 0, n = 0; while (f_in) { getline(f_in, line); // splits line string delimited by ",", and save to tokens. //split(line, ",", tokens);// token = splitEx(line,","); size_t.push_back(token.size()); csv_data.push_back(token); count++; } //印出轉置二維陣列 for(n = 0; ((j+1)%6) == 0 ; n++) { for(i = 0 ; i < count ; i++ ) { for( j = (6*n) ; ((j < size_t[i]) && (((j+1)%6) != 0)); j++) { f_out << csv_data[i][j] << ","; } f_out << endl; } } f_out.close(); f_in.close(); system("pause"); } //split字串line, into vector token vector<string> splitEx(const string& src, string del) { vector<string> strs; int delLen = del.size();//分割字串的size int lastPos = 0,index = -1; while (-1 != (index = src.find(del,lastPos))) { strs.push_back(src.substr(lastPos,index - lastPos)); lastPos = index + delLen; } string lastStr = src.substr(lastPos);//抓最後一個子字串 if (!lastStr.empty()) strs.push_back(lastStr);//一個一個塞進vector return strs; } 補充說明 總覺得好像不是很難的問題,可是不知道哪裡想不清楚... 感謝回答! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.47.165.1 ※ 編輯: shesee 來自: 114.47.165.1 (08/25 00:41) ※ 編輯: shesee 來自: 114.47.165.1 (08/25 00:42)
shesee:測試檔案http://ppt.cc/qqZc 08/25 00:56
uranusjr:你印出來的那行 vector 的索引值寫錯了, 不是 i 跟 j 08/25 01:34
uranusjr:不對, 我搞錯了, 上面當我沒說...我覺得你直接換一個比較 08/25 01:50
uranusjr:直覺的迴圈寫法可能快一點XD 08/25 01:50