Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2017, 19:58   #1
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
По умолчанию Поменять местами содержимое файлов (используя вспомогательный файл) - C++

Даны два файла с числами. Поменять местами их содержимое (использовать вспомогательный файл).

Мой неработающий код:
Код:
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
fstream f1("f1.txt");
fstream f2("f2.txt");
fstream g("g.txt");

int main()
{
	string i;
	while (!f1.eof())
	{
		getline(f1,i);
		g << i;
		i == i.erase(i.size());
	}
	f1.close(); g.close();
	string x;
	while (!f2.eof())
	{
		getline(f2, x);
		f1 << x;
		
	}
	f2.close(); f1.close();
	string j;
	while (!g.eof())
	{
		getline(g,j);
		f2 << j;
		j == j.erase(j.size());
	}
	f2.close(); g.close();
	system("pause");
	return 0;
}

Последний раз редактировалось Serge_Bliznykov; 17.02.2017 в 10:14.
vladrrom вне форума Ответить с цитированием
Старый 13.02.2017, 20:15   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Скажи что у тебя получилось на сегодняшний момент?
ura_111 вне форума Ответить с цитированием
Старый 13.02.2017, 20:17   #3
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
По умолчанию

Содержимое f1.txt скопировалось в файл g.txt
На этом всё.
vladrrom вне форума Ответить с цитированием
Старый 13.02.2017, 20:59   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ладно, сейчас посмотрю.
ura_111 вне форума Ответить с цитированием
Старый 13.02.2017, 21:30   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А ну пробуй:
Код:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
	string i;
	char f1[] = "f1.txt";
	char f2[] = "f2.txt";
	char g[] = "g.txt";

	// 1) запись из 1-го в пром-ный файл
	{
		fstream vuvod(f1, ios::in);
		fstream vvod(g, ios::out);
		while (!vuvod.eof())
		{
			getline(vuvod, i);
			vvod << i << '\n';
			i == i.erase(i.size());
		}
		vuvod.close();
		vvod.close();
	}	
	// 2) заменить из 2-го 1-й файл
	{
		fstream vuvod(f2, ios::in);
		fstream vvod(f1, ios::out);
		while (!vuvod.eof())
		{
			getline(vuvod, i);
			vvod << i << '\n';
			i == i.erase(i.size());
		}
		vuvod.close();
		vvod.close();
	}
	// 3) заменить из пром-ный 2-й файл
	{
		fstream vuvod(g, ios::in);
		fstream vvod(f2, ios::out);
		while (!vuvod.eof())
		{
			getline(vuvod, i);
			vvod << i << '\n';
			i == i.erase(i.size());
		}
		vuvod.close();
		vvod.close();
	}
	system("pause");
	return 0;
}
Протестируй хорошенько.
ura_111 вне форума Ответить с цитированием
Старый 13.02.2017, 22:15   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ну ты понял, да?
Если в файлах по одной строчке, тогда (речь о твоём коде) ещё ничего, но если насколько строк присутствует, тогда оно сливается в одну... С другой стороны, я поправил, но теперь в конце файла появляется не понятный знак новой строки....

Пиши, что думаешь.
ura_111 вне форума Ответить с цитированием
Старый 13.02.2017, 22:20   #7
_kilik_
Пользователь
 
Аватар для _kilik_
 
Регистрация: 16.08.2011
Сообщений: 69
По умолчанию

делаем краcиво
PHP код:
//Даны два файла с числами. Поменять местами их содержимое (использовать вспомогательный файл).
/*
 * ---------------------------------------------
 * алгоритм:
 * 1. записать содержимого файла 1 в файл буфер
 * 2. записать содержимого файла 2 в файл 1
 * 3. записать содержимого файла буфер в файл 1
 * ---------------------------------------------
 * нам требуется создать ф-ыю копирования содержимого файла
*/

#include <QCoreApplication>
#include<iostream>
#include<fstream>
using namespace std;

int fileCopy(string &f1,string &f2);
int main(){
    
setlocale(LC_ALL,"rus");
    
string f1="D:\\f1.txt",f2="D:\\f2.txt",buf="D:\\buf.txt";//при желании реализовать ввод с клавы
    
fileCopy(f1,buf);
    
fileCopy(f2,f1);
    
fileCopy(buf,f2);
    
cout<<"обмен успешно завершен, буфер один байт."<<endl;
    
system("pause");
    return 
0;

}

int fileCopy(string &f1,string &f2){
    
char buferByte;
    
ifstream in(f1.c_str(),ios::in|ios::binary);//читаем с файла в бинарном
    
if(!in){
        
cout<<"что-то пошло не так"<<endl<<"не могу открыть файл:"
           
<<f1<<" для чтения";
        
system("pause");
        exit -
1;
    }

    
ofstream out(f2.c_str(),ios::out|ios::binary);//пишем в файл в бинарном
    
if(!out){
        
cout<<"что-то пошло не так"<<endl<<"не могу открыть файл:"
           
<<f1<<" для записи";
        
system("pause");
        exit -
2;
    }
    while(!
in.eof()){//пока не достигнут конец файла с которого читаем
        
in.get(buferByte);
        if(!
in.eof()){
            
cout<<buferByte<<" - ";//для отладки
            
out.put(buferByte);}
    }
    
cout<<endl;
    
//закроем файлы
    
in.close();
    
out.close();
    return(
0);


_kilik_ вне форума Ответить с цитированием
Старый 16.02.2017, 20:11   #8
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
По умолчанию

Всё работает и да, он правда выводит в конце почему то выводит новую строку.
Ну вроде не страшно, но попробую исправить и если получится, скину работающий код.
vladrrom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять таблицы местами Makroshka Microsoft Office Excel 9 27.10.2016 11:11
Поменять местами Dmitriy_Voland Microsoft Office Excel 1 22.08.2012 18:38
Имеется файл с числами. Поменять местами bulldoz6 Паскаль, Turbo Pascal, PascalABC.NET 3 25.01.2012 17:52
поменять местами научите Паскаль, Turbo Pascal, PascalABC.NET 13 08.01.2009 13:43
Поменять местами абзацы Иллидан Microsoft Office Word 1 16.09.2008 08:14