lola2
Wednesday, 23 March 2005, 23:57
Проблема вот в чем: надо несколько (пусть будет 2) разных файлов перемешать и записать в один. в файле-результате должны встречаться все строки из исходных файлов в случайном порядке.
Как это сделать на С или С++?
Заранее благодарна за помощь
Salagin
Thursday, 24 March 2005, 8:23
Я не сильно Сионист :-))) но напишу решение, а его можно написать на любом языке...
1. Читаешь оба файла
2. Генеришь случайные числа, к примеру если число < ну там 0.5, то пишешь в новый файл строчку из 1 файла, если нет - то из второго.
Либо запихиваешь содержимое файлов в хэш, а потом случайным образом выдергиваешь в новый файл.
Идея вроде такая...
lola2
Thursday, 24 March 2005, 14:05
За идею спасибо.
Про хэш по-моему лучше.
Попробую...
А вот насчет
QUOTE |
но напишу решение, а его можно написать на любом языке...
|
конечно верно, только дело в деталях.
)
lola2
Wednesday, 30 March 2005, 20:54
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
int main(){
const int MAX_BUF = 1024;
ifstream f1("1.txt"), f2("2.txt");
ofstream f3("3.txt");
if (!f1 || !f2 || !f3) {
cerr << " ошибка при открытии файла\n";
return -1; }
std::vector<std::string> line;
char buffer[MAX_BUF];
line.reserve(MAX_BUF);
while (!f1.eof()) {
f1.getline(buffer, MAX_BUF);
line.push_back(buffer);
}
while (!f2.eof()) {
f2.getline(buffer, MAX_BUF);
line.push_back(buffer);
}
std::random_shuffle(line.begin(), line.end());
for (int i = 0; i < line.size(); i++) {
f3.write(line[i].c_str(), line[i].size());
f3.put('\n'); } f1.close(); f2.close();
f3.close();
return 0;
}
Если так сделать.
все работает, но может можно проще?
Вобщем нужна конструктивная критика.