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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2012, 19:57   #1
recycler
 
Регистрация: 10.04.2012
Сообщений: 4
Восклицание Слияние тхт файлов

Пишу прогу для слияния двух тхт файлов где идея такая - основная идея состоит в том, чтобы поочерёдно сравнивать элементы этих файлов. То есть, на первом шаге сравнить первые элементы двух файлов, выбрать из них наименьший и отправить его в результирующий файл. Затем уже сравнить элемент, не попавший в основной файл, со следующим элементом во втором файле. Делается это до тех пор, пока один файл не станет пустым. Затем, оставшиеся элементы из не пустого файла передаются в конец результирующего файла

Пока вот это у меня. Как тут правильно алгоритм записать и как правильно результат в файл загнать?
Код:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXLINE 4096
#define IFNAME "in.txt"
#define IFFNAME "in2.txt"
#define OFNAME "out.txt"

 
int scmp(const void *p1, const void *p2)
{
    const char *s1, *s2;
 
    s1 = * (char **) p1;
    s2 = * (char **) p2;
    return strcmp(s1, s2);
}
 
int main(void)
{
    FILE *ifp,*i2fp,*ofp;
    char *lineptr[MAXLINE],*lineptr2[MAXLINE],*rez[MAXLINE];
    char s[MAXLINE],ss[MAXLINE];
    int i, nl, j, n2,k;
 
    ifp = fopen(IFNAME, "r");//open file in
    if(ifp == NULL || (ofp = fopen(OFNAME, "w")) == NULL) 
	{
        perror("fopen");
        return -1;
    }
	i2fp = fopen(IFFNAME, "r");//open file in2
    if(ifp == NULL || (ofp = fopen(OFNAME, "w")) == NULL) 
	{
        perror("fopen");
        return -1;
    }
 
    for(i = 0; i < MAXLINE; ) {
        if(fgets(s, sizeof(s), ifp) == NULL)
            break;
        if(*s != '\n')
            lineptr[i++] = strdup(s);
    }
    for(j = 0; j < MAXLINE; ) {
        if(fgets(ss, sizeof(ss), i2fp) == NULL)
            break;
        if(*ss != '\n')
            lineptr2[j++] = strdup(ss);
    }

	
     for(i=0;i<MAXLINE;i++)//примерный код сортировки
	 {
		 for(j=0;j<MAXLINE;j++)
         {
		 if(lineptr(i)>lineptr2(j)) rez(i)=lineptr(i); else rez(i)=lineptr2(i);
		 }
	 }
	

    //nl = i;
   // qsort(lineptr, nl, sizeof(char *), scmp);
 
    for(i = 0; i < nl; i++) {
        fprintf(ofp, "%s", rez[i]);
        free(rez[i]);
    }
    fclose(ifp);
    fclose(i2fp);
    fclose(ofp);
	
    return 0;system("pause");
}

Последний раз редактировалось Stilet; 04.06.2012 в 20:27.
recycler вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Соединение ТХТ файлов magistic Общие вопросы Delphi 3 24.01.2012 04:20
Импорт ТХТ файлов в Excel Sepaa Microsoft Office Excel 8 13.11.2010 22:06
Массовое редактирование тхт файлов Tvitvi PHP 3 06.05.2010 20:51
Работа с каталогом тхт файлов. littlecoder Общие вопросы Delphi 4 17.12.2008 22:47
Запись файлов в *.тхт с учетом повторяющихся значений Arteom Общие вопросы Delphi 3 03.04.2008 17:26