Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
1

Слияние двух файлов по алгоритму: цифра вставляется после двух символов

05.05.2015, 17:23. Просмотров 1948. Ответов 39
Метки нет (Все метки)

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
#include <iostream>
#include <io.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
 
using namespace std;
 
// Даны два файла. Составить программу слияния этих файлов
// в один по алгоритму - цифра вставляется после двух символов
 
void Reshenie(char str1[100], char str2[100], char str3[200], FILE *f_1, FILE *f_2, FILE *f_3)
{
    f_1 = fopen("text1.txt", "a+");
    f_2 = fopen("text2.txt", "a+");
 
    while (fgets(str1, 100, f_1))
    {
        while (fgets(str2, 100, f_2))
        {
            if (!strcmp(str1, str2))
                fputs(str3, f_3);
        }
        fseek(f_3, 0, 0);
    }
 
    fclose(f_1);
    fclose(f_2);
 
    cout << "Result file nomer 3: " << str3;
}
int main()
{
    FILE *f_1, *f_2, *f_3;
    char str1[100], str2[100], str3[200];
 
    f_1 = fopen("text1.txt", "a+");
        if (f_1 == NULL)
        {
            f_1 = fopen("text1.txt", "a+");
        }
    cout << "Vvedite text file nomer 1: " << str1;
    cin >> str1;
    fscanf(f_1, str1);
    fclose(f_1);
 
    f_2 = fopen("text2.txt", "a+");
        if (f_2 == NULL)
        {
            f_2 = fopen("text2.txt", "a+");
        }
    cout << "Vvedite text file nomer 2: " << str2;
    cin >> str2;
    fscanf(f_2, str2);
    fclose(f_2);
 
    system("CLS");
    Reshenie(str1, str2, str3, f_1, f_2, f_3);
    getch();
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2015, 17:23
Ответы с готовыми решениями:

Слияние двух файлов
Здравствуйте. В папке есть два тхт файла, как мне их соединить и записать в третий и в третьем...

Слияние двух текстовых файлов
необходимо прогу оформить в ввиде функции, вызываемой из основной программы. Целой переменной n...

Вывод двух файлов и слияние их
есть файл вопросы.txt и ссылки.txt и в каждом из файлов строки 01. 02. ... 40. как...

Слияние двух текстовых файлов
Ребят помогите плизз задали курсовую в универе на тему Разработать программу слияния двух...

39
6907 / 5972 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
05.05.2015, 18:25 2
Задача не ясна. Что за цифра вставляется? А если нет там цифр?
0
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
06.05.2015, 09:47  [ТС] 3
nmcf, два файла, в одном текст(прол к), во втором цифры(456), реализовать слияние файлов(пр4ол5 к6) , если цифр нету, то можно сделать выход, в файле нету цифр. Подкорректируйте вышеуказанный код или подскажите, что неправильно сделал. как реализовать алгоритм два символа цифра?
0
6907 / 5972 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
06.05.2015, 10:12 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
f_1 = fopen("text1.txt", "r");
f_2 = fopen("text2.txt", "r");
f_3 = fopen("text3.txt", "w");
 
int c, n;
 
while (true)
{
    if ((c = fgetc(f_1) == EOF) break;
    fputc(c, f_3);
    if ((c = fgetc(f_1) == EOF) break;
    fputc(c, f_3);
    if ((n = fgetc(f_2) == EOF) break;
    fputc(n, f_3);
}
 
if (c != EOF) while ((c = fgetc(f_1) != EOF) fputc(c, f_3);
 
fclose(f_1);
fclose(f_2);
fclose(f_3);
0
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
06.05.2015, 10:49  [ТС] 5
nmcf, а как цикл реализовать?
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
while (!f_3.eof())
{
   f_3.get(c);
   i++;
}
for(int j = 0; j < s; j++){
 if (isalpha(j) || isspace(j)){
{
 cout << j;
}
 else{
  b = j+1;
  j+1 = i
   j=b;}
 for (int j = 0; j = j*3; j++)
 {
  if (!isdigit(j))
{
 c = j+1;
  j+1 = i
   j=c;
}
}   
}
0
6907 / 5972 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
06.05.2015, 11:05 6
Какой цикл? Там всё уже есть.
0
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
06.05.2015, 12:06  [ТС] 7
nmcf, т.е. выводится сначала 2 символа потом цифра пока не конец строки у вас, а если в двух файлах будут и цифры, и символы, как тогда пройтись циклом и вывести по алгоритму?
0
6907 / 5972 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
06.05.2015, 12:39 8
Приведи пример. Если в первом файле есть цифры, их игнорировать или просто записывать в выходной, но не считать? Тоже со вторым файлом - если там есть не цифры, их пропускать или что?
0
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
06.05.2015, 14:27  [ТС] 9
nmcf, если в первом файле (йцу34 ук) и второй файл (435лдаи), то формируется третий (йц3у 4ук4дл3аи5), по идее получается сортировка 3 файла по алгоритму 2 символа 1 цифра, так наверное

Добавлено через 1 час 17 минут
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
#include <iostream>
#include <stdio.h>
#include <windows.h>
 
using namespace std;
void Sliyanie (char str1[100], char str2[100], char strr[200], FILE *f1, FILE *f2, FILE *fr)
{
    f1 = fopen("file1.txt", "r");
    f2 = fopen("file2.txt", "r");
    fr = fopen("filer.txt", "w");
 
    int c, n;
 
    while (true)
    {
        if (c = fgetc(f1) == EOF) break;
        fputc(c,fr);
        if (c = fgetc(f1) == EOF) break;
        fputc(c, fr);
        if (n = fgetc(f2) == EOF) break;
        fputc(n, fr);
    }
 
    if (c != EOF) while (c = fgetc(f1) != EOF) fputc(c, fr);
 
    fclose(f1);
    fclose(f2);
    fclose(fr);
 
    cout << strr;
}
int main()
{
 FILE *f1, *f2, *fr;
 char str1[100], str2[100], strr[200];
 
 f1 = fopen("file1.txt","a+");
 if (f1 == NULL)
 {
     f1 = fopen("file1.txt","a+");
 }
 cout << "Vvedite text 1-file: ";
 cin >> str1;
 fscanf(f1 , str1);
 fclose(f1);
 
 f2 = fopen("file2.txt", "a+");
 if (f2 == NULL)
 {
     f2 = fopen("file2.txt", "a+");
 }
 cout << "Vvedite text 2-file: ";
 cin >> str2;
 fscanf(f2 , str2);
 fclose(f2);
 
 system("CLS");
 
Sliyanie(str1, str2, strr, f1, f2, fr);
 
return 0;
}
не выводит третий файл после преобразования, с чем связана ошибка?
0
6907 / 5972 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
06.05.2015, 19:53 10
Ну ты намудрил, у тебя цифры первого файл переставляются, что ли? Сделай, чтобы по-простому хотя бы работало для начала.
Что значит не выводит? Файл создаётся? Исходные файлы есть?
fscanf() на fprintf() замени.
0
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
06.05.2015, 23:29  [ТС] 11
nmcf, не выводит результат 3 файла, не читает консоль, хотя, если написать вывод 1 и 2 файла, то их результат выводит, а третий неправильной кодировки надпись получается

Добавлено через 11 минут
я с консоли создаю и ввожу данные файлов
0
6907 / 5972 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
07.05.2015, 09:38 12
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
#include <iostream>
#include <stdio.h>
#include <windows.h>
 
using namespace std;
 
void Sliyanie ()
{
    FILE *f1, *f2, *fr;
 
    f1 = fopen("file1.txt", "r");
    f2 = fopen("file2.txt", "r");
    fr = fopen("filer.txt", "w");
 
    int c, n;
 
    while (true)
    {
        if (c = fgetc(f1) == EOF) break;
        fputc(c,fr);
        if (c = fgetc(f1) == EOF) break;
        fputc(c, fr);
        if (n = fgetc(f2) == EOF) break;
        fputc(n, fr);
    }
 
    if (c != EOF) while (c = fgetc(f1) != EOF) fputc(c, fr);
 
    fclose(f1);
    fclose(f2);
    fclose(fr);
 
    cout << strr;
}
int main()
{
 FILE *f1, *f2;
 char s[100];
 
 if ((f1 = fopen("file1.txt","w")) == NULL) return 0;
 
 cout << "Vvedite text 1-file: ";
 cin.getline(s, 100);
 fprintf(f1, "%s", s);
 fclose(f1);
 
 if ((f2 = fopen("file2.txt","w")) == NULL) return 0;
 
 cout << "Vvedite text 2-file: ";
 cin.getline(s, 100);
 fprintf(f2 , "%s", s);
 fclose(f2);
 
 system("CLS");
 
 Sliyanie();
 
return 0;
}
0
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
07.05.2015, 10:51  [ТС] 13
nmcf,
Слияние двух файлов по алгоритму: цифра вставляется после двух символов
все равно не хочет преобразовывать третий файл, так как и до этого с первыми двумя хорошо все, третий не работает ?
0
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
07.05.2015, 12:51  [ТС] 14
может слиять два файла в один и там отсортировать его отсортировать
0
6907 / 5972 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
07.05.2015, 15:28 15
Скобки пропустил. Вот так работает. Результат смотреть в третьем файле.
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
#include <iostream>
#include <cstdio>
 
using namespace std;
 
void Sliyanie ()
{
    FILE *f1, *f2, *fr;
 
    f1 = fopen("file1.txt", "r");
    f2 = fopen("file2.txt", "r");
    fr = fopen("filer.txt", "w");
 
    int c, n;
 
    while (true)
    {
        if ((c = fgetc(f1)) == EOF) break;
        fputc(c,fr);
        if ((c = fgetc(f1)) == EOF) break;
        fputc(c, fr);
        if ((n = fgetc(f2)) == EOF) break;
        fputc(n, fr);
    }
 
    if (c != EOF) while ((c = fgetc(f1)) != EOF) fputc(c, fr);
 
    fclose(f1);
    fclose(f2);
    fclose(fr);
}
 
int main()
{
    FILE *f1, *f2;
    char s[100];
 
    if ((f1 = fopen("file1.txt","w")) == NULL) return 0;
 
    cout << "Vvedite text 1-file: ";
    cin.getline(s, 100);
    fprintf(f1, "%s", s);
    fclose(f1);
 
    if ((f2 = fopen("file2.txt","w")) == NULL) return 0;
 
    cout << "Vvedite text 2-file: ";
    cin.getline(s, 100);
    fprintf(f2 , "%s", s);
    fclose(f2);
 
    system("cls");
 
    Sliyanie();
 
    return 0;
}
1
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
07.05.2015, 16:48  [ТС] 16
nmcf, спасибо, работает, можешь подсказать словами с логикой решения, если в первом файле будут встречаться цифры, будет типа того :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 while (true)
    {
        if (((c = fgetc(f1)) == EOF) && (isalpha(c = fgetc(f1))==)|| isspace(c = fgetc(f1))) break;
        fputc(c,fr);
  else 
{берем следующий элемент, пока не буква}
        if (((c = fgetc(f1)) == EOF) && (isalpha(c = fgetc(f1))==)|| isspace(c = fgetc(f1))) break;
        fputc(c,fr);
  else 
{берем следующий элемент, пока не буква}
        if ((n = fgetc(f2)) == EOF) break;
        fputc(n, fr);
    }
 
    if (c != EOF) while ((c = fgetc(f1)) != EOF) fputc(c, fr);
это если в первом будут встречаться цифры, да и то работать не будет, неизвестно куда девать цифры, а если при том, что еще во втором файле будут символы, сам себе придумываю задачи, проще наверное брать 3 файл и его сортировать, да?
0
6907 / 5972 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
07.05.2015, 19:40 17
Вот так будет пропускать цифры:
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
void Sliyanie ()
{
    FILE *f1, *f2, *fr;
 
    f1 = fopen("file1.txt", "r");
    f2 = fopen("file2.txt", "r");
    fr = fopen("filer.txt", "w");
 
    int c, n;
 
    while (true)
    {
        for (int i = 0; i < 2;)
        {
            if ((c = fgetc(f1)) == EOF) break;
            fputc(c, fr);
            if (!isdigit(c)) ++i;
        }
        if (c == EOF) break;
        if ((n = fgetc(f2)) == EOF) break;
        fputc(n, fr);
    }
 
    if (c != EOF) while ((c = fgetc(f1)) != EOF) fputc(c, fr);
 
    fclose(f1);
    fclose(f2);
    fclose(fr);
}
Да оставь как есть. Сказано же: после двух символов. Цифра тоже символ. Задай в первом файле любой текст, а во втором только цифры.
0
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
07.05.2015, 22:42  [ТС] 18
nmcf, так-то оно так хочется разобраться прост
0
6907 / 5972 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
07.05.2015, 23:03 19
В чём тут разбираться-то? Здравый смысл должен быть в задании.
0
4 / 4 / 2
Регистрация: 18.12.2012
Сообщений: 102
07.05.2015, 23:43  [ТС] 20
nmcf, эт да, я сам уже придумываю условий, ты не знаешь как рисовать в коде блоксе, смотрел что старая библиотека graphics.h не используется, используется windows.h, да?

Добавлено через 5 минут
как реализовать вращение рисунка рисунок ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2015, 23:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Слияние двух текстовых файлов
Помогите пожалуйста!! нужно разработать программу слияния двух текстовых файлов в один файл по...

Слияние двух отсортированных файлов
Доброго все времени суток, господа. Прошу помощи у того, кого не затруднит. Пытаюсь реализовать...

Слияние двух текстовых файлов
Пожалуйста,помогите написать вот такую программу : Произвести слияние двух текстовых файлов. Имена...

Произвести слияние двух файлов...
Даны два файла - А и В: целых чисел. Файл А - отсортирован по возрастанию; файл В - отсортирован по...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.