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;
 }
Если так сделать.
все работает, но может можно проще?
Вобщем нужна конструктивная критика.