作者shesee (秘密)
看板C_and_CPP
標題[問題] 部分移動矩陣的位置
時間Wed Aug 25 00:39:24 2010
遇到的問題: (題意請描述清楚)
將矩陣部分的位置移動
原矩陣長類似這樣:
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)
→ uranusjr:你印出來的那行 vector 的索引值寫錯了, 不是 i 跟 j 08/25 01:34
→ uranusjr:不對, 我搞錯了, 上面當我沒說...我覺得你直接換一個比較 08/25 01:50
→ uranusjr:直覺的迴圈寫法可能快一點XD 08/25 01:50