28 апреля 2024, 07:12:48

Новости:

Чтобы загрузить изображение нужно нажать кнопку "ПРЕДВАРИТЕЛЬНЫЙ ПРОСМОТР".


L

не могу разобраться с файловым вводом-выводом(C++)

Автор lola2, 23 марта 2005, 22:57:11

0 Пользователей и 1 гость просматривают эту тему.

lola2

Проблема вот в чем: надо несколько (пусть будет 2) разных файлов перемешать и записать в один. в файле-результате должны встречаться все строки из исходных файлов в случайном порядке.
Как это сделать на С или С++?

Заранее благодарна за помощь

Salagin

Я не сильно Сионист :-))) но напишу решение, а его можно написать на любом языке...
1. Читаешь оба файла
2. Генеришь случайные числа, к примеру если число < ну там 0.5, то пишешь в новый файл строчку из 1 файла, если нет - то из второго.
Либо запихиваешь содержимое файлов в хэш, а потом случайным образом выдергиваешь в новый файл.
Идея вроде такая...
Если к власти не придут красно-коричневые, потому что им помешают зеленые, то власть захватят голубые.

Летят N самолетов, нет N мало -- К и оба реактивные...

lola2

За идею спасибо.
Про хэш по-моему лучше.
Попробую...
А вот насчет
Цитироватьно напишу решение, а его можно написать на любом языке...

конечно верно, только дело в деталях. :))  

lola2

#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.c_str(), line.size());
  f3.put('\n');   }  f1.close();  f2.close();
  f3.close();
  return 0;
}


Если так сделать.
все работает, но может можно проще?
Вобщем нужна конструктивная критика.



По всем вопросам пишите по адресу gratispp@mail.ru