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
}