将二进制文件数据读取到数组中并对其进行排序



Sup,伙计们。我真的需要一些代码方面的帮助。因此,我已经创建了两个二进制文件,我需要创建第三个文件,该文件以排序的方式包含来自前两个文件的数据(文件的结构是数字(int)和文本(char),文件需要按数字升序排序(文本必须跟在数字后面)。

这里有一个例子(不要介意逗号):

file1.txt:

1文本1,7文本2,4文本3

file2.txt:

3文本4,8文本5,2文本6

所以文件3应该是:

1文本1,2文本6,3文本4,4文本3,7文本2,8文本5

到目前为止,正如我所说,我已经创建了两个二进制文件,其中写入了数字和文本。我还将文件的内容写入了一个数组。问题是——我不知道如何对它们进行排序并将它们归档。

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

class faili {
int atslega;
char * komponente;
public:
faili(int x, char * s) {
    komponente = new char[20];
    strcpy(komponente, s);
    atslega = x;
}
faili() {
    komponente = new char[20];
    atslega = 0;
}
void writeToFile(fstream & f) {
    f.write((char *)&atslega, sizeof(int));
    f.write(komponente, 20);
}
void readFromFile(fstream & f) {
    f.read((char *)&atslega, sizeof(int));
    f.read(komponente, 20);
}
int getKey() {
    return atslega;
}
void printIt() {
    cout << atslega << " " << komponente << endl;
}
};
typedef vector<faili *> failiMas;
void printMas(failiMas arr) {
    for (failiMas::iterator it = arr.begin(); it != arr.end(); it++) {
        (*it)->printIt();
    }
};
class salidzinat {
public:
bool operator()(faili * i1, faili * i2) {
    return i1->getKey() > i2->getKey();
 }
 };

    typedef vector<faili *> failiMas;
    int main() {
        ofstream outputFile1w("f1.txt");
        /*faili * i1 = new faili(1, "sad");
        faili * i2 = new faili(3, "asdasd");
        faili * i3 = new faili(6, "dfgdfc");
        faili * i4 = new faili(4, "dija");
        faili * i5 = new faili(8, "yjk");
        faili * i6 = new faili(2, "ruifjer");
        */
        faili ier1(1, "sad");
        faili ier2(3, "asdasd");
        faili ier3(6, "dfgdfn");
        faili ier4(4, "dija");
        faili ier5(8, "yjk");
        faili ier6(2, "ruifjer");
        fstream f1("f1.txt");
        ier1.writeToFile(f1);
        ier2.writeToFile(f1);
        ier3.writeToFile(f1);
        f1.close();
        f1.open("f1.txt");
        faili a, b, c;
        a.readFromFile(f1);
        b.readFromFile(f1);
        c.readFromFile(f1);
        cout << "Faila f1.txt saturs: n";
        a.printIt();
        b.printIt();
        c.printIt();
        f1.close();
        ofstream outputFile2w("f2.txt");
        fstream f2("f2.txt");
        ier4.writeToFile(f2);
        ier5.writeToFile(f2);
        ier6.writeToFile(f2);
        f2.close();
        f2.open("f2.txt");
        faili d, e, f;
        d.readFromFile(f2);
        e.readFromFile(f2);
        f.readFromFile(f2);
        cout << "Faila f2.txt saturs: n";
        d.printIt();
        e.printIt();
        f.printIt();
        f2.close();
        ifstream inputFile1r;
        inputFile1r.open("f1.txt", ios::in);
        int count = 0;
        string textarr[5];
        string textsave = "Null";
        while (!inputFile1r.eof()) {
            inputFile1r >> textsave;
            textarr[count] = textsave;
            cout << textarr[count] << endl;
            count++;
        }
        inputFile1r.close();
        ifstream inputFile2r;
        inputFile2r.open("f2.txt", ios::in);;
        while (!inputFile2r.eof()) {
            inputFile2r >> textsave;
            textarr[count] = textsave;
            cout << textarr[count] << endl;
            count++;
        }
        system("Pause");
        //-----------------------------------------------------------------------------------------------------------------------
    };

I、 当然,不需要你为我做家庭作业:p。我只是想知道我的想法是否正确,下一步该怎么办,因为我很迷茫。

您可以在循环中使用eof()条件并跟踪所有数字。如果出现一个大于"最大"的新数字,则将其在数组中向前移动。有很多排序技术可以使用,但这是最基本的一种。一旦您有了排序的数组,您可以简单地将数据写入第三个文件。

#include <unistd.h>
int c;
int greatest = 0;
int arr = new int[N];
while ((c = getchar()) != EOF)
{
    faili l;
    string s = l.readFromFile(file);
    int num = atoi(s);
    #Compare with greatest and write in array
}

最新更新