Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
13 / 13 / 5
Регистрация: 02.08.2012
Сообщений: 162

Файл a.txt нужно сравнить с файлом c.txt

21.04.2013, 19:32. Показов 2835. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Есть файл a.txt:
1
2
3
4
5

Есть файл c.txt:
2
3

Нужно создать файл b.txt такого типа:
1
4
5

И после этого нужно записать значения с файла b.txt в файл c.txt
Файл c.txt:
2
3
1
4
5

Жду ответа, заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.04.2013, 19:32
Ответы с готовыми решениями:

Переписать компоненты файла 1.txt в файл 3.txt так, чтобы в файле 3.txt числа шли в определенном порядке
Дан файл 1.txt, компоненты которого являются целыми числами.Файл 1.txt содержит столько же отрицательных чисел, сколько положительных....

Как сделать перенос из отдного txt файла текста в другой txt файл в Turbo C?
Надо сделать с потоками. fopen fgets fputs - с этими функциями

Для файл с текстом input.txt построить алфавитно частичный словарь в файле output.txt
Помогите разобраться, не могу понять как сделать, чтобы алфавит размещался в росте (a, b, c, d ,...) условие задачи. Алфавитно...

24
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.04.2013, 11:09
Студворк — интернет-сервис помощи студентам
fanat2011, где-то мой косяк. Делал в mingw. Попробовал в gcc - stack corrupted
Где-то освобождается дважды один и тот же участок памяти. Самое интересное, в mingw все отрабатывает и даже корректно
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.04.2013, 11:48
Опытным путем было установлено, что косяки происходят благодаря функции fgets. Если переписать с использованием fscanf, то все отрабатывает корректно.

Что за чертовщина?

Добавлено через 10 минут
fanat2011, сами переписать сможете?
1
13 / 13 / 5
Регистрация: 02.08.2012
Сообщений: 162
26.04.2013, 15:47  [ТС]
Переписал код программы, но почему-то не хочет работать

Код программы:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STR_SIZE 150
 
/* считывание строки из файла */
void makestr(FILE *fp, char *str)
{
    size_t endpos;
    fscanf(fp, "%s", str);
    /* удаляем перенос строки */
    endpos = strlen(str) - 1; 
    if (str[endpos] == '\n')
        str[endpos] = '\0';
}
 
/* замена двух строк местами */
void swapstr(char *s1, char *s2)
{
    char *tmp = malloc(strlen(s1) + 1);
    strcpy(tmp, s1);
    strcpy(s1, s2);
    strcpy(s2, tmp);
    free(tmp);
}
 
/* сортировка массива строк по возрастанию */
void sort(char **str, const int size)
{
    int i, j;
    for (i=0; i < size; i++)
        for (j=i; j >= 0; j--)
            if (strcmp(str[i], str[j]) < 0)
                swapstr(str[i], str[j]);
}
 
int main(void) 
{
    char **tmp1, **tmp2, tmp[STR_SIZE];
    FILE *fa = fopen("a.txt", "r"), *fb = fopen("b.txt", "w"),
        *fc = fopen("c.txt", "r");
    int size1 = 0, size2 = 0, i, j;
    if (!fa || !fb || !fc) return 1;
    
    /* определяем кол-во строк в файлах */
    while (!feof(fa) && fscanf(fa, "%s", tmp))
        size1++;
    while (!feof(fc) && fscanf(fc, "%s", tmp))
        size2++;
    
    /* выделяем память под массив строк */
    tmp1 = malloc(sizeof(char*) * size1);
    tmp2 = malloc(sizeof(char*) * size2);
    
    /* переоткрываем файлы */
    freopen ("a.txt", "r", fa);
    freopen ("c.txt", "r", fc);
    
    /* выделяем память и считываем строки в массивы */
    for (i=0; !feof(fa); i++)
    {
        tmp1[i] = malloc(STR_SIZE);
        makestr(fa, tmp1[i]);
    }
        
    for (i=0; !feof(fc); i++)
    {
        tmp2[i] = malloc(STR_SIZE);
        makestr(fc, tmp2[i]);
    }
    
    /* сортируем массивы строк */
    sort(tmp1, size1);
    sort(tmp2, size2);
    
    /* записываем уникальные слова из файла a.txt */
    j = 0;
    for (i=0; i < size1; i++)
    {
        /* printf("%s %s %d --- ", tmp1[i], tmp2[j], strcmp(tmp1[i], tmp2[j])); */
        /* пока слова из второго массива "не меньше", передвигаемся дальше */
        while (j < size2 - 1 && strcmp(tmp1[i], tmp2[j]) >= 0)
            j++;
        
        /* printf("%s %s %d\n", tmp1[i], tmp2[j], strcmp(tmp1[i], tmp2[j])); */
        /* если слово из первого массива "больше" */
        if (strcmp(tmp1[i], tmp2[j]) > 0)
            fprintf(fb, "%s\n", tmp1[i]);      
    }
    
    /* переоткрываем файл c.txt для записи в конец и файл b.txt для считывания */
    freopen ("b.txt", "r", fb);
    freopen ("c.txt", "a", fc);
    
    /* дублируем файл b.txt в конец c.txt */
    while (!feof(fb))
    {
        makestr(fb, tmp);
        if (!feof(fb))
            fprintf(fc, "\n%s", tmp);
    }
    
    /* освобождаем память */
    for (i=0; i < size1; i++)
        free(tmp1[i]);
    for (i=0; i < size2; i++)
        free(tmp2[i]);
    free(tmp1);
    free(tmp2);
    
    /* закрываем файлы */
    fclose(fa);
    fclose(fb);
    fclose(fc);
    return 0;
}
До выполнения программы
Файл a.txt:
abs@1;123
abs@2;123

Файл c.txt:
abs@2;123

После запуска программы
Не изменяет файл b, c.txt
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.04.2013, 16:02
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STR_SIZE 150
 
/* çàìåíà äâóõ ñòðîê ìåñòàìè */
void swapstr(char *s1, char *s2)
{
    char *tmp = malloc(strlen(s1) + 1);
    strcpy(tmp, s1);
    strcpy(s1, s2);
    strcpy(s2, tmp);
    free(tmp);
}
 
/* ñîðòèðîâêà ìàññèâà ñòðîê ïî âîçðàñòàíèþ */
void sort(char **str, const int size)
{
    int i, j;
    for (i=0; i < size; i++)
        for (j=i-1; j >= 0; j--)
            if (strcmp(str[i], str[j]) < 0)
                swapstr(str[i], str[j]);
}
 
int main(void) 
{
    char **tmp1, **tmp2, tmp[STR_SIZE];
    FILE *fa = fopen("a.txt", "r"), *fb = fopen("b.txt", "w"),
        *fc = fopen("c.txt", "r");
    int size1 = 0, size2 = 0, i, j;
    if (!fa || !fb || !fc) return 1;
    
    /* îïðåäåëÿåì êîë-âî ñòðîê â ôàéëàõ */
    while (!feof(fa) && fscanf(fa, "%s", tmp))
        if (!feof(fa)) size1++;
    while (!feof(fc) && fscanf(fc, "%s", tmp))
        if (!feof(fc)) size2++;
    
    /* âûäåëÿåì ïàìÿòü ïîä ìàññèâ ñòðîê */
    tmp1 = malloc(sizeof(char*) * size1);
    tmp2 = malloc(sizeof(char*) * size2);
    
    /* ïåðåîòêðûâàåì ôàéëû */
    freopen ("a.txt", "r", fa);
    freopen ("c.txt", "r", fc);
    
    /* âûäåëÿåì ïàìÿòü è ñ÷èòûâàåì ñòðîêè â ìàññèâû */
    for (i=0; i < size1; i++)
    {
        tmp1[i] = malloc(STR_SIZE);
        fscanf(fa, "%s", tmp1[i]);
    }
        
    for (i=0; i < size2; i++)
    {
        tmp2[i] = malloc(STR_SIZE);
        fscanf(fc, "%s", tmp2[i]);
    }
    
    /* ñîðòèðóåì ìàññèâû ñòðîê */
    sort(tmp1, size1);
    sort(tmp2, size2);
    
    /* çàïèñûâàåì óíèêàëüíûå ñëîâà èç ôàéëà a.txt */
    j = 0;
    for (i=0; i < size1; i++)
    {
        /* printf("%s %s %d --- ", tmp1[i], tmp2[j], strcmp(tmp1[i], tmp2[j])); */
        /* ïîêà ñëîâà èç âòîðîãî ìàññèâà "íå ìåíüøå", ïåðåäâèãàåìñÿ äàëüøå */
        while (j < size2 - 1 && strcmp(tmp1[i], tmp2[j]) >= 0)
            j++;
        
        /* printf("%s %s %d\n", tmp1[i], tmp2[j], strcmp(tmp1[i], tmp2[j])); */
        /* åñëè ñëîâî èç ïåðâîãî ìàññèâà "áîëüøå" */
        if (strcmp(tmp1[i], tmp2[j]) != 0)
            fprintf(fb, "%s\n", tmp1[i]);      
    }
    
    /* ïåðåîòêðûâàåì ôàéë c.txt äëÿ çàïèñè â êîíåö è ôàéë b.txt äëÿ ñ÷èòûâàíèÿ */
    freopen ("b.txt", "r", fb);
    freopen ("c.txt", "a", fc);
    
    /* äóáëèðóåì ôàéë b.txt â êîíåö c.txt */
    while (!feof(fb))
    {
        fscanf(fb, "%s", tmp);
        if (!feof(fb))
            fprintf(fc, "%s\n", tmp);
    }
    
    /* îñâîáîæäàåì ïàìÿòü */
    for (i=0; i < size1; i++)
        free(tmp1[i]);
    for (i=0; i < size2; i++)
        free(tmp2[i]);
    free(tmp1);
    free(tmp2);
    
    /* çàêðûâàåì ôàéëû */
    fclose(fa);
    fclose(fb);
    fclose(fc);
    return 0;
}
1
13 / 13 / 5
Регистрация: 02.08.2012
Сообщений: 162
26.04.2013, 21:19  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STR_SIZE 150
 
/* çàìåíà äâóõ ñòðîê ìåñòàìè */
void swapstr(char *s1, char *s2)
{
    char *tmp = malloc(strlen(s1) + 1);
    strcpy(tmp, s1);
    strcpy(s1, s2);
    strcpy(s2, tmp);
    free(tmp);
}
 
/* ñîðòèðîâêà ìàññèâà ñòðîê ïî âîçðàñòàíèþ */
void sort(char **str, const int size)
{
    int i, j;
    for (i=0; i < size; i++)
        for (j=i-1; j >= 0; j--)
            if (strcmp(str[i], str[j]) < 0)
                swapstr(str[i], str[j]);
}
 
int main(void) 
{
    char **tmp1, **tmp2, tmp[STR_SIZE];
    FILE *fa = fopen("a.txt", "r"), *fb = fopen("b.txt", "w"),
        *fc = fopen("c.txt", "r");
    int size1 = 0, size2 = 0, i, j;
    if (!fa || !fb || !fc) return 1;
    
    /* îïðåäåëÿåì êîë-âî ñòðîê â ôàéëàõ */
    while (!feof(fa) && fscanf(fa, "%s", tmp))
        if (!feof(fa)) size1++;
    while (!feof(fc) && fscanf(fc, "%s", tmp))
        if (!feof(fc)) size2++;
    
    /* âûäåëÿåì ïàìÿòü ïîä ìàññèâ ñòðîê */
    tmp1 = malloc(sizeof(char*) * size1);
    tmp2 = malloc(sizeof(char*) * size2);
    
    /* ïåðåîòêðûâàåì ôàéëû */
    freopen ("a.txt", "r", fa);
    freopen ("c.txt", "r", fc);
    
    /* âûäåëÿåì ïàìÿòü è ñ÷èòûâàåì ñòðîêè â ìàññèâû */
    for (i=0; i < size1; i++)
    {
        tmp1[i] = malloc(STR_SIZE);
        fscanf(fa, "%s", tmp1[i]);
    }
        
    for (i=0; i < size2; i++)
    {
        tmp2[i] = malloc(STR_SIZE);
        fscanf(fc, "%s", tmp2[i]);
    }
    
    /* ñîðòèðóåì ìàññèâû ñòðîê */
    sort(tmp1, size1);
    sort(tmp2, size2);
    
    /* çàïèñûâàåì óíèêàëüíûå ñëîâà èç ôàéëà a.txt */
    j = 0;
    for (i=0; i < size1; i++)
    {
        /* printf("%s %s %d --- ", tmp1[i], tmp2[j], strcmp(tmp1[i], tmp2[j])); */
        /* ïîêà ñëîâà èç âòîðîãî ìàññèâà "íå ìåíüøå", ïåðåäâèãàåìñÿ äàëüøå */
        while (j < size2 - 1 && strcmp(tmp1[i], tmp2[j]) >= 0)
            j++;
        
        /* printf("%s %s %d\n", tmp1[i], tmp2[j], strcmp(tmp1[i], tmp2[j])); */
        /* åñëè ñëîâî èç ïåðâîãî ìàññèâà "áîëüøå" */
        if (strcmp(tmp1[i], tmp2[j]) != 0)
            fprintf(fb, "%s\n", tmp1[i]);      
    }
    
    /* ïåðåîòêðûâàåì ôàéë c.txt äëÿ çàïèñè â êîíåö è ôàéë b.txt äëÿ ñ÷èòûâàíèÿ */
    freopen ("b.txt", "r", fb);
    freopen ("c.txt", "a", fc);
    
    /* äóáëèðóåì ôàéë b.txt â êîíåö c.txt */
    while (!feof(fb))
    {
        fscanf(fb, "%s", tmp);
        if (!feof(fb))
            fprintf(fc, "%s\n", tmp);
    }
    
    /* îñâîáîæäàåì ïàìÿòü */
    for (i=0; i < size1; i++)
        free(tmp1[i]);
    for (i=0; i < size2; i++)
        free(tmp2[i]);
    free(tmp1);
    free(tmp2);
    
    /* çàêðûâàåì ôàéëû */
    fclose(fa);
    fclose(fb);
    fclose(fc);
    return 0;
}
Теперь так работает
До выполнения:
Файл a.txt:
abs@1;123
abs@2;123
abs@3;123

Файл c.txt:
abs@2;123
abs@1;123

После выполнения:
Файл b.txt:
abs@1;123
Должно быть:
abs@3;123
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2013, 21:19
Помогаю со студенческими работами здесь

На диске находится файл result.txt. написать программу, создающую копию этого файла с именем copy_resylt.txt
На диске находится файл result.txt. Написать программу, создающую копию этого файла с именем copy_resylt.txt. В файле текст

Записать 200 случайных чисел в файл a.txt. В файл b.txt вывести четные, а в файл c.txt нечетные
Записать 200 случайных чисел в файл a.txt. В файл b.txt вывести четные, а в файл c.txt нечетные.

В папке К2 создайте файл t3.txt, в который перепишите вначале текст из файла t1.txt, а затем из t2.txt
Программным путем: 1. В папке С:\temp создайте папки К1 и К2. 2. В папке К1: a) создайте файл t1.txt, в который запишите следующий...

Создать новый файл qa.txt, который будет содержать строки с вопросами и ответами из файлов q.txt и a.txt.
В текстовом редакторе создать два текстовых файла q.txt и a.txt, которые соответственно содержат вопросы и ответы на их. Создать новый файл...

Разбить входной файл xanadu.txt на 2 выходных 1.txt и 2.txt. В 1- нечетные, 2- четные
Разбить входной файл xanadu.txt на 2 выходных 1.txt и 2.txt. В 1- нечетные, 2- четные. Записать программу обратного слияния.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru