|
楼主 |
发表于 2018-11-14 22:01:04
|
显示全部楼层
- #include <iostream>
- #include <fstream>
- #include <stdlib.h>
- #include <time.h>
- using namespace std;
- void MatrixTranspos(char* infilename, char* outfilename, unsigned long M, unsigned long N, int line)
- {// 原矩阵文件名, 转置矩阵文件名, 行数, 列数, 一次读取行数
- ifstream in;
- ofstream out;
- int buffsize = N*line*3+line*2; // 缓冲区大小 列数*要读取的行数*3(一个数字占三个字符的位置)+要读取的行数(换行符)
- char *Matrix = new char[buffsize]; // 分配缓冲区内存
- char *ptr = Matrix;
- in.open(infilename, ios::in|ios::binary); // 打开原矩阵文件
- out.open(outfilename, ios::out|ios::app); // 打开转置矩阵文件
- if(!in || !out)
- {
- cout << "File open error!" << endl;
- return ;
- }
- in.read((char*)Matrix, buffsize); // 按块读取数据
- in.seekg(0, in.beg);
- // cout.write((char*)Matrix, buffsize); // 输出缓冲区内数据
- for(int i = 0; i < N; i++) // 转置
- {
- for(int j = 0; j < line; j++)
- {
- //out.write((char*)Matrix+3*N*j+2*j, 3);
- //cout << ptr[3*i+3*N*j+2*j] << ptr[3*i+3*N*j+2*j+1] << ptr[3*i+3*N*j+2*j+2];
- out << ptr[3*i+3*N*j+2*j] << ptr[3*i+3*N*j+2*j+1] << ptr[3*i+3*N*j+2*j+2];
- //ptr = ptr+3*N*j+2*j;
- //cout.write((char*)Matrix+3*N*j+2*j, 3);
- }
- out <<'\n';
- //cout << endl;
- //cout << " " << ++k << '\n';
- //Matrix = Matrix+3;
- //ptr = Matrix;
- }
- delete[] Matrix;
- in.close();
- out.close();
- }
- int main()
- {
- char *infile = "matrix.txt";
- char *outfile = "transpos.txt";
- // // 创建大矩阵文件
- // ofstream out;
- // out.open("matrix.txt", ios::out);
- //
- // srand((int)time(0));
- // for(int i = 0; i < 3000; i++)
- // {
- // for(int j = 0; j <2000; j++)
- // {
- // out << setw(3) << (rand()%100); // 一个数字占三个字节的位置
- // }
- // out << endl;
- // }
- // out.close();
- MatrixTranspos(infile, outfile, 3000, 2000, 10);
- return 0;
- }
复制代码
这样输出就可以了。
谢谢大家的回复! |
|