Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
#1

Черезстрочное слияние - C++

30.09.2009, 21:53. Просмотров 2049. Ответов 33
Метки нет (Все метки)

Появилось вот такое задание по C++:
Написать программу на языке C++ чересстрочного слияния (т.е. первая строка в выходном файле - это первая строка из первого файла, вторая строка в выходном файле - это первая строка из второго файла, третья строка в выходном файле - вторая строка из первого файла и т.д.) двух текстовых файлов с удалением в каждой строке слов после которых стоит любой знак препинания.

Алгоритм программы:
C++
1
2
3
4
5
6
                           \\здесь описание всяких переменных 
void main() {}        \\основная программа
void s1() {}           \\процедура, открывающая 1 и 2 файл на чтение с диска
vois s2() {}           \\процедура, создающая третий файл и модифицирующая его (копирование строк)
void s3() {}           \\процедура, которая выполняет удаление (после знаков препинания)
void s4() {}           \\процедура, закрывающая все файлы
Подскажите, пожалуйста, правильно выбран алгоритм реализации данной программы...
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2009, 21:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Черезстрочное слияние (C++):

Слияние массивов - C++
я новичек в программировании. Помогите пожалуйста решить слудеющию задачу на С++. Заданы три упорядоченных по возрастанию массива f,...

Слияние массивов - C++
Даны два массива. Массив А состоит из N элементов и отсортирован по возрастанию. Массив В состоит из М элементов и отсортирован по...

Бинарное слияние - C++
Не получается реализовать алгоритм. Хелп плз. http://img246.imageshack.us/img246/6600/binslimf5.jpg Вот что у меня получается. ...

Слияние массивов - C++
Задан массив A из N элементов и массив B из M элементов. Сформировать массив L из массивов A и B путем их слияния так, чтобы сначала...

слияние списков - C++
помогите с написание программы!!! нужно написать программу которая объединяет два упорядоченных списка в один. Функция merge должна...

Слияние деревьев - C++
Сижу, мучаюсь, не могу понять что подразумевается в задании о слиянии деревьев. Подвесить вершину второго дерева к какому-нить листу 1-го?...

33
mik-a-el
Администратор
70890 / 40157 / 232
Регистрация: 10.04.2006
Сообщений: 12,626
30.09.2009, 22:06 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Чересстрочное слияние файлов
1
kravam
быдлокодер
1705 / 892 / 45
Регистрация: 04.06.2008
Сообщений: 5,524
01.10.2009, 02:51 #3
Цитата Сообщение от kandrey58region Посмотреть сообщение
с удалением в каждой строке слов после которых стоит любой знак препинания.
Это непонятно. Слова удаляются в строках, которые где находятся?

1)В исходных файлах
2)В выходном файле
3)Везде
0
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
01.10.2009, 09:52  [ТС] #4
Цитата Сообщение от kravam Посмотреть сообщение
Это непонятно. Слова удаляются в строках, которые где находятся?

1)В исходных файлах
2)В выходном файле
3)Везде
В выходном файле, и знак препинания удаляется тоже

Добавлено через 56 минут
все дело в том, что по данной ссылке, как я понял программа состоит из нескольких файлов, а у меня должна состоять из одного, и мне нужно пока сделать без ООП, т.к. я даже не могу понять что там описано и происходит
0
M128K145
Эксперт JavaЭксперт С++
8316 / 3536 / 143
Регистрация: 03.07.2009
Сообщений: 10,708
01.10.2009, 10:06 #5
kandrey58region, сбрось весь код в один файл(только правильно) и будет у тебя все работать
0
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
01.10.2009, 10:51  [ТС] #6
т.е. прога должна выглядеть наподобее
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
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
int kol=0;
int p=0;
int v=0;
int k=0;
int i=0;
int res,res1;
class gaz{
  char nazv[20];
  int str, tir;
  char opis[40];
public:
void WriteFile()    \\как бы здесь будет производится открытие входных файлов, и создание выходного файла, и копирование из входных в выходной файл
{
        FILE *fi_1,*fi_2,*fo;
         clrscr();
         if ((fi_1=fopen("D:\\file_1.txt", "r"))==0){
          cout << "Error open input file!!!" ;
          return;}
         if ((fi_2=fopen("D:\\file_2.txt", "r"))==0){
          cout << "Error open input file!!!" ;
          return;}
         if ((fo=fopen("D:\\out.dat","w+b"))==0){
          cout << "Error open output file!!!";
          return;}
 
        fclose(fi_1);
        fclose(fi_2);
        fclose(fo);
        return;
}
 
void out()              \\здесь обработка скопированного в выходной файл
{
        FILE *fo;
        clrscr();
        if ((fo=fopen("D:\\out.dat","rb"))==0){
          cout << "Error open output file!!!";
          return ;}
        int i;
        cout<<"Input number of Zapisi ";
        cin >>i;
        if (i>kol) {
          cout << "Zapisi net!!!";
          return;}
        fseek(fo,sizeof(gaz)*(i-1),SEEK_SET);
        fread(this,sizeof(gaz),1,fo);
        cout << "Nazvanie: " << nazv << " str.: " << str << " tir: " << tir << endl;
        fclose(fo);
}
 
void ClearFile()  \\здесь очистка выходного файла перед новым запуском программы
{
        FILE *fo;
        clrscr();
        if ((fo=fopen("D:\\out.dat","wb"))==0){
        cout << "Error open output file!!!"<<endl;
          return ;}
        fclose(fo);
}
Кто как думает может лучше, разбить первую процедуру на более легкие??
И вот еще одну вещь никак не могу понять, как ограничить чтобы прога нашла первую строку первого файла(т.е. чтобы она остановилась и перестала копаться в этом файле, переключилась на второй)

Добавлено через 35 минут
Цитата Сообщение от M128K145 Посмотреть сообщение
kandrey58region, сбрось весь код в один файл(только правильно) и будет у тебя все работать

M128K145, попробовал работает, но все дело в том что там вроде методом Объектно-Ориентированного Программирования выполнено, а мне нужно в обычном виде, тем более в той проге я прост даже не могу понять и объяснить, что, как и где происходит

Так то даже приблизительно представляю что будет в обычном варианте программы, но я не понимаю как задать конец строки в первом файле чтобы в том момент когда она закончится он перешел к первой строке но уже второго файла
0
kravam
быдлокодер
1705 / 892 / 45
Регистрация: 04.06.2008
Сообщений: 5,524
02.10.2009, 22:07 #7
Автор, на тебе в самом обычном виде.
Поскольку ты не оговорил, что делать, если количество строк в файлах разно, я взял на себя смелость написать прогу для файлов с равным количеством строк.
Количество срок определяется по количеству символов следующей строки.
Чтобы они были равными, ты сам должен позаботиться.

В файлах не допускается наличие символа конца строки (предполагается, что файлы текстовые,
следовательно, созданы в текстовом редакторе, а не в HIEW, например, то есть не содержат
симолов конца строки.)

Результат смотри в файле fail3.cc
Привет!

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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include <stdio.h>
#include <iostream>
using namespace std;
 
//Это будет дубликат указателя на результирующую строку. ДОЛлжен быть
//ВИДЕН отовсюду
char* rez_strok_dubl;
 
 
 
//Два счётчика строк. Будем по строка проходить и эти счётчики изменять 
int ch_str_1= 0;
int ch_str_2= 0;
 
//это вот будет длины первой и второй строк, куда мы будем запихивать файлы
int lenf1;
int lenf2;
 
 
//+++++++++++++++++++++++++++++++++++ФУНКЦИЯ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
 //Эта функция будет принимать указатель на строку и копировать
 //Смотреть, не является ли последний символ знаком препинания.
 //Есля является, тогда  ничего из этой строки скопировано не будет
 //Если не является, а допустим, там слово, то указатель устанавливается на
 //начало этого слова и происходит копирование этого слова. Всё! 
 //А ЕЩЁ В ЭТОЙ ФУНКЦИИ СЧИТАЕТСЯ, СКОЛЬКО СИМВОЛОВ пройдено в строке (НЕ результирующей!)...
 //для этого нужен второй параметр
 //А от третьего параметра толк будет только при рассмотре первой строки
 //Но он тоже нужен
void func (char* uk, int* ch_str, char* stroka, int len) {
 
  //Ищем конец строки или конец файла
  while (*uk!= 10 && *ch_str< len-1) {
   uk++;
   (*ch_str)++;
  }
  //Теперь смотрим, не знак ли препинания ПРЕДЫДУЩИЙ СИМВОЛ
  if (!ispunct (*(uk- 1))) {
   
   //зНАЧИТ, это какое-то слово. Найдём его начало.
   do {
    uk--;
    (*ch_str)--;
   }
   while (!ispunct(*uk)&& *uk!= 10 && uk!=stroka);
   if (uk!=stroka) {
    uk++;
    (* ch_str)++;
   }
   //Можно использовать библиотечную функцию, но мы лучше побайтно будем копировать.
   //Тем более, что нам важно установить uk на начало следующей строки
 
   while (*uk!= 10&&(*ch_str < len- 1)) {
    *rez_strok_dubl++= *uk++;
    (*ch_str)++;
   }
   *rez_strok_dubl++= *uk++;
  }
 
  uk++;
  (*ch_str)++;
  //Теперь uk указывает на начало новой строки, а rez_strok_dubl на 
  //туда, куда копировать будем, если что
 
 
 }
 
 
 
 
 
 
 
 
int main(){
 
 //Первое, что мы сделаем это скопируем файлы в память
 //Для этого найдём их размеры
 //Но сначала откроем их для чтения
 FILE* f1, *f2;
 if (!(f1= fopen ("fail1.cc", "rb"))) {
  cout<< "fail1_ne_otkrit\n";
  system ("PAUSE");
  exit (1);
 }
 
 
 if (!(f2= fopen ("fail2.cc", "rb"))) {
  cout<< "fail2_ne_otkrit\n";
  system ("PAUSE");
  exit (1);
 }
 
 
 //Теперь размеры
 fseek (f1, 0, SEEK_END);
 lenf1= ftell(f1);
 
 fseek (f2, 0, SEEK_END);
 lenf2= ftell(f2);
 
 //Теперь выделим в памяти место под эти файлы и их туда скопируем
 //указетли на начала строк
 char* stroka_1= (char*) malloc (lenf1) ;
 char* stroka_2= (char*) malloc (lenf2) ;
 
 fseek (f1, 0, SEEK_SET);
 fseek (f2, 0, SEEK_SET);
 
 fread (stroka_1, lenf1, 1, f1);
 fread (stroka_2, lenf2, 1, f2);
 
 
 fclose (f1);
 fclose (f2);
 
 
 //Выделим также память под третью строку. Туда будем записывать результат
 char* rez_strok= (char*) malloc (lenf1+ lenf2) ;
 //Кто ег знает, может, там вообще не будет знаков препинания, в этих строках...
 
 //Продублируем на всякий случай
 rez_strok_dubl= rez_strok;
 
 
 
 
 while (ch_str_2< lenf2) {
 
  func (&stroka_1[ch_str_1], &ch_str_1, stroka_1, lenf1); 
  func (&stroka_2[ch_str_2], &ch_str_2, stroka_2, lenf2); 
 }
 
 
 //Запихаем результат в текстовый файл-результат
 FILE* f3;
 if (!(f3= fopen ("fail3.cc", "wb"))) {
  cout<< "fail3_ne_otkrit\n";
  system ("PAUSE");
  exit (1);
 }
 
 int i= 0;
 while (&rez_strok [i]!= rez_strok_dubl)
  fputc ((unsigned char)rez_strok [i++], f3);
 
 fclose (f3);
 
 
 return 0;
}

Это тексты исходных файлов. Переходы на пустую строку очень важны, поскольку их количество и
определяет количество строк в ТЕКСТОВОМ файле. Тестирование ими прошло успешно.

fail1.cc
C++
1
2
3
4
5
6
1
 
 
22
333
44.4.4
fail2.cc
C++
1
2
3
4
5
5555..5
666666
7..777777
 
.
1
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
03.10.2009, 16:23  [ТС] #8
kravam, спасибо за помощь!!!
На твоих файлах вроде все работает, но щас попробовал вот на этих файлах, т.е. файлы с обычным текстом созданные в блокноте формата .txt
file_1.txt
C++
1
2
3
4
5
6
Сперва старинная рукопись использовалась для ведения бухгалтерии, но, 
с развитием пергамента в III веке н. э., постепенно начала вытеснять папирусы. 
Это происходило уже в христианском мире. Причин принятия рукописи как основного вида книг 
несколько: она экономична, поскольку можно использовать обе стороны листа; ее легко спрятать; 
она была удобна и доступна. Возможно, христианские авторы использовали рукописи нарочно, чтобы они не были 
похожи на языческие тексты, которые обычно писались в форме свитков.
file_2.txt
C++
1
2
3
4
5
6
7
В начале XIV века, в Западной Европе появилась ксилография (она была разработана 
задолго до этого на Востоке). В ксилографии матрица с изображением страницы 
вырезалась из куска древесины. Её можно было окунуть в чернила и 
использовать, чтобы сделать несколько копий страницы. Книги, так же, как игральные 
карты и религиозные изображения, начали производить ксилографией. Но создание книги было 
кропотливым процессом, так как для каждой страницы нужно было делать свою резьбу. Кроме того, 
дерево было недолговечно — оно легко стиралось и трескалось.
А результат получается вот такой

file_3.txt
C++
1
2
3
4
5
6
7
8
9
10
11
12
 
а 
 
ы 
г 
 
 
 
 
 
 
ь.
Добавлено через 14 минут
а должно было получиться вот что

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Сперва старинная рукопись использовалась для ведения
В начале XIV в Западной Европе появилась ксилография (она была разработана 
с развитием пергамента в III веке постепенно начала вытеснять 
задолго до этого на В ксилографии матрица с изображением страницы 
Это происходило уже в христианском Причин принятия рукописи как основного вида книг 
вырезалась из куска Её можно было окунуть в чернила и
 она поскольку можно использовать обе стороны ее легко 
 чтобы сделать несколько копий так как игральные 
она была удобна и христианские авторы использовали рукописи чтобы они не были 
карты и религиозные начали производить Но создание книги было 
похожи на языческие которые обычно писались в форме
кропотливым  так как для каждой страницы нужно было делать свою  Кроме  
 
дерево было недолговечно  оно легко стиралось и
0
kravam
быдлокодер
1705 / 892 / 45
Регистрация: 04.06.2008
Сообщений: 5,524
03.10.2009, 18:22 #9
Ничё не выйдет.
Во-первых, это русский текст, а не английский. Но дело даже не в этом.
Это бы я исправил, написав свою реализацию функции ispunct (используемая мной 99 % считает за знак пунктуации русские символы).

Главное, вот что. Вот задание:

"Написать программу на языке C++ чересстрочного слияния (т.е. первая строка в выходном файле - это первая строка из первого файла, вторая строка в выходном файле - это первая строка из второго файла, третья строка в выходном файле - вторая строка из первого файла и т.д.) двух текстовых файлов с удалением в каждой строке слов после которых стоит любой знак препинания."

Возьмём первую строку первого файла
"Сперва старинная рукопись использовалась для ведения бухгалтерии, но,"
После каких слов в строке стоят знаки препинания?
Правильно, после всех слов. Вот я все слова и удалял. Всё верно.
с удалением в каждой строке слов после которых стоит
любой знак препинания."
1
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
03.10.2009, 19:28  [ТС] #10
Цитата Сообщение от kravam Посмотреть сообщение
Ничё не выйдет.
Во-первых, это русский текст, а не английский. Но дело даже не в этом.
Это бы я исправил, написав свою реализацию функции ispunct (используемая мной 99 % считает за знак пунктуации русские символы).

Главное, вот что. Вот задание:

"Написать программу на языке C++ чересстрочного слияния (т.е. первая строка в выходном файле - это первая строка из первого файла, вторая строка в выходном файле - это первая строка из второго файла, третья строка в выходном файле - вторая строка из первого файла и т.д.) двух текстовых файлов с удалением в каждой строке слов после которых стоит любой знак препинания."

Возьмём первую строку первого файла
"Сперва старинная рукопись использовалась для ведения бухгалтерии, но,"
После каких слов в строке стоят знаки препинания?
Правильно, после всех слов. Вот я все слова и удалял. Всё верно.
с удалением в каждой строке слов после которых стоит
любой знак препинания."
Если честно я не очень понял вас, ведь знак препинания стоит после слов "бухгалтерии," и "но,"

Добавлено через 12 минут
kravam, извини с файлами на русском языке я чтото натупил...
вот с файлами на английском языке

file_1.txt
C++
1
2
3
4
5
6
First codex was used for accounting, but 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
similar to the pagan texts, which are usually written in the form of scrolls.
file_2.txt
C++
1
2
3
4
5
6
7
At the beginning of XIV century in Western Europe appeared woodcutting (it was developed 
long before the East). In the matrix of woodcuts depicting Pages 
cut from a piece of wood. It can be dipped in ink and 
used to make multiple copies of a page. Books, as well as playing 
cards and religious pictures, began to produce woodcuts. But the creation of the book was 
laborious process, since each page had to do his carving. Besides, 
tree was short-lived - it is easy to wash and crack.
вот что получилось
file_3.txt
C++
1
2
3
4
5
6
7
8
9
10
11
12
 but 
it was developed 
 
 In the matrix of woodcuts depicting Pages 
 The reasons for the adoption of the manuscript as the main type of books 
 It can be dipped in ink and 
 
 as well as playing 
 that they were not 
 But the creation of the book was 
 which are usually written in the form of [COLOR="#ff0000"]scrolls. [/COLOR]
 it is easy to wash and [COLOR="#ff0000"]crack.[/COLOR]
но я только не смог понять почему же, если встречается знак препинания, прога удаляет все что встретилось ранее??
а в двух последних предложениях остались точки...
0
kravam
быдлокодер
1705 / 892 / 45
Регистрация: 04.06.2008
Сообщений: 5,524
03.10.2009, 20:28 #11
Раз такое дело, слушай.
прога удаляет все что встретилось ранее потому, что так было заявлено в условии. Удалить все слова, после которых встретился знак препинания.
Это понимается однозначно.
Если в строке есть слово, после которого стоит знак препинания, оно удаляется. Всё.

То есть я понимаю, что ты имел ввиду несколько другое. Нужно было удалять слова, за которыми НЕПОСРЕДСТВЕННО стоит знак препинания. Тебе вопрос- а почему ты сразу не уточнил, введя кроме понятий "до" и "после" (какими, по умолчанию и исчерпывается описание взаиморасположений слова и знака препинания в строке) понятие "непосредственно после"?
Впредь будь внимательнее. И давай к этом вопросу больше не возвращаться.

...А то знаешь, некоторый дядька оперирует термином слово... А в программёрском мире слово вообще означает другое. Что это? Последовательность печатаемых симолов? А каких? +++ слово? Вот так то. Ну и так далее. Да ладно бы это- посмотри темы. Устанешь возиться, клещами слова вытягивать из разных там... Ну, вот, а не повезло тебе в результате.
Попробуй сам с исходгником повозись или покажи кому-нибудь.

По поводу руссого текста- мне просто надо было вначале либо оговорить ограниченность применения кода, либо разбираться с русским текстом. Я запарился, не сделал ни того ни другого.

...А прога работает очень даже предсказуемо.

Ибо твоя задача- сделать в файлах равное количество строк. (Иначе выведется не поймёшь что).
Количество строк это количество ПЕРЕВОДОВ НА НОВУЮ СТРОКУ (я это оговорил!).
А оно у тебя разное. В одном файле я вижу 6, а в другом 7.
Так что исправляй и получай запрограммированный вывод.
Хотя я понимаю, тебе такой вывод даром не нужен. Ну, извини уж.
1
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
08.10.2009, 12:25  [ТС] #12
Цитата Сообщение от kravam Посмотреть сообщение
То есть я понимаю, что ты имел ввиду несколько другое. Нужно было удалять слова, за которыми НЕПОСРЕДСТВЕННО стоит знак препинания. Тебе вопрос- а почему ты сразу не уточнил, введя кроме понятий "до" и "после" (какими, по умолчанию и исчерпывается описание взаиморасположений слова и знака препинания в строке) понятие "непосредственно после"?
Впредь будь внимательнее. И давай к этом вопросу больше не возвращаться.
kravam, насчет этого извини я не прав, все дело оказалось в том, что препод напечатал в задании "слов", а не "слова"


Цитата Сообщение от kravam Посмотреть сообщение
Ибо твоя задача- сделать в файлах равное количество строк. (Иначе выведется не поймёшь что).
Количество строк это количество ПЕРЕВОДОВ НА НОВУЮ СТРОКУ (я это оговорил!).
А оно у тебя разное. В одном файле я вижу 6, а в другом 7.
Так что исправляй и получай запрограммированный вывод.
Хотя я понимаю, тебе такой вывод даром не нужен. Ну, извини уж.
Со строками у меня было три примера кода, которые выполняли слияние только с равнострочными файлами...
Но не тут было преподу резко захотелось, чтобы теперь прога делала таким образом, например, в первом файле 5 строк, во втором файле 11 строк...
Третий выходной файл получается из 10 строк (5 из первого и 5 из второго файлов), а остальные 6 строк из второго файла просто копируются без всякого переноса на другую строку...
Пока не очень понял, что все же править нужно, можешь сказать, реально ли этот код под эти условия подогнать??
0
kravam
быдлокодер
1705 / 892 / 45
Регистрация: 04.06.2008
Сообщений: 5,524
08.10.2009, 13:34 #13
Конечно, всё можно. Он на то и исходник, чтобы в нём всё можно было править.
Начнём с лёгкого. Пусть у тебя 2 ТЕКСТОВЫХ файла с разным количеством строк. А это значит, что количество строк считается по символам перевода на другую строку /n

Ну... самое простое, что тебе надо сделать, это написать такой код:

1) подсчитываешь количество строк в каждом файле fail1.txt и fail2.txt
2) выбираешь файл который больше. Допустим, в файле fail2.txt больше. (В файле fail1.txt допустим, 4 строки, а в файле fail2.txt 11 строк)
3) Разбиваешь файл fail2.txt на 2 текстовых файла. fail2a.txt и fail2b.txt Причём! В fail2a.txt должно быть тоже 4 строки, а в файле fail2b.txt 7 (потому, что 4+ 7== 11)

Вот имеем два текстовых файла fail1.txt и fail2a.txt с равным количеством строк.
Теперь к ним можно применить мою прогу. Получаешь файл на выходе. И прибавляешь к нему файл fail2b.txt. Вот пока это делай.
0
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
08.10.2009, 14:00  [ТС] #14
Цитата Сообщение от kravam Посмотреть сообщение
Конечно, всё можно. Он на то и исходник, чтобы в нём всё можно было править.
Начнём с лёгкого. Пусть у тебя 2 ТЕКСТОВЫХ файла с разным количеством строк. А это значит, что количество строк считается по символам перевода на другую строку /n

Ну... самое простое, что тебе надо сделать, это написать такой код:

1) подсчитываешь количество строк в каждом файле fail1.txt и fail2.txt
2) выбираешь файл который больше. Допустим, в файле fail2.txt больше. (В файле fail1.txt допустим, 4 строки, а в файле fail2.txt 11 строк)
3) Разбиваешь файл fail2.txt на 2 текстовых файла. fail2a.txt и fail2b.txt Причём! В fail2a.txt должно быть тоже 4 строки, а в файле fail2b.txt 7 (потому, что 4+ 7== 11)

Вот имеем два текстовых файла fail1.txt и fail2a.txt с равным количеством строк.
Теперь к ним можно применить мою прогу. Получаешь файл на выходе. И прибавляешь к нему файл fail2b.txt. Вот пока это делай.
Мысль с разбиением файла была... Препод говорит нельзя, нужно только чтобы было два входных и один исходный файл, а это получается один первый файл и два вторых...
Вот я и думаю, реально вообще организовать так, что прога сначала выполняет слияние, потом раз в первом или во втором файле строки закончились... Она берет и копирует из того файла в котором остались строки, все остальные строки...
0
kravam
быдлокодер
1705 / 892 / 45
Регистрация: 04.06.2008
Сообщений: 5,524
08.10.2009, 14:13 #15
Конечно, реально.
Тогда копируй файлы в память, образуя две большие-большие строки.
aaa\nkkk\nlklk\nyuyuyu\nghjhj\n
qq\nuuiuiu\njkjk\njkjjk\njkjkk\njkjkjkj\njkjkk\n

А потом их сливаешь и попутно смотришь, в какой строке закончатся символы\n. Когда закончатся- сливание прекращаешь (в первой строке 5 символов \n, а во второй 7 Значит, первая закончится, а вторая ещё нет), дописываешь оставшиеся символы из ДРУГОЙ СТРОКИ и получаешь огромную строку-результат и выполняешь обработку огромной получившейся строки. Удаляешь из неё что тебе надо. Вот так просто и незатейливо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2009, 14:13
Привет! Вот еще темы с ответами:

Слияние массивов на с++ - C++
Добродень всем.задача такая:массив структур размера N(в моем случае 100).разбить на ленты.т.о получается 10 лент по 10 элементов в каждой...

Слияние массивов - C++
Получить массив С(k), упорядоченный по возрастанию, путем слияния массивов A(n) и B(m), упорядоченных перед этим по возрастанию, где k = n...

Слияние отсортированных массивов. - C++
задача: есть двумерный целочисленный массив n на n в котором каждая строка отсортирована по возрастанию. надо слить его в одномерный...

Слияние бинарных деревьев - C++
Слияние - это функция выбора элемента из двух Берем два дерева; функцию, которая выбирает один элемент из двух T fun(T x1, Tx2); ...


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

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

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