Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
#1

Чтение из файла - C++

08.10.2009, 09:21. Просмотров 1035. Ответов 3

Есть задание: написать программу,которая считывыает числа из файла, написанные в нем через пробел. Числа кодируются и записываются в новый файл. Кодируются следующим образом: повторяющие числа, идущие друг за другом, заменяются одним этим числом и через двоеточие указывается количество повторений этого числа. Далее нужно считать числа кодированные числа из файла и раскодировать их обратно, записав раскодированные числа в новый файл. Тем самым числа в первом и последнем файле должны быть идентичны.
Пример:
Исходный файл: 1 1 1 55 55 10 23 23 13
Кодированный файл: 1:3 55:2 10:1 23:2 13:1
Раскодированный файл: 1 1 1 55 55 10 23 23 13
Вот написанный мною код:
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <fstream>
using namespace std;
int n=0;
void kod();
void decod();
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"rus");
    kod();
    decod();
    return 0;
}
void kod()
{
    int c;
    int k=0;
    ifstream fileIn;
    fileIn.open("Ishodn.txt");
    if (!fileIn.is_open())
    {
        cout<<"Невозможно открыть файл\n";
        exit(1);
    }
    while(!fileIn.eof())
    {
        c=fileIn.get();
        if(c==32)
            k++;
    }
    fileIn.close();
    ifstream fileIn1;
    fileIn1.open("Ishodn.txt");
    if (!fileIn1.is_open())
    {
        cout<<"Невозможно открыть файл\n";
        exit(1);
    }
    n=k+1;
    int* mas=new int[n];
    int i=0;
    while(!fileIn1.eof())
    {
        fileIn1>>mas[i];
        i++;
    }
    fileIn1.close();
    ofstream fileOut;
    fileOut.open("kod.txt",ios::out);
    if (!fileOut.is_open())
    {
        cout<<"Невозможно открыть файл\n";
        exit(1);
    }
    int control=1,count=0;
    int* mas1=new int[2*n];
    int j=0;
    for(int i=0;i<n;i++)
    {
        if(mas[i]==mas[i+1])
            control++;
        else
        {
            mas1[j]=mas[i];
            mas1[j+1]=control;
            j+=2;
            control=1;
            count++;
        }
    }
    int* mas2=new int[count*2];
    for(int i=0;i<2*count;i++)
        mas2[i]=mas1[i];
    delete mas1;
    i=0;
    while(i<2*count)
    {
        fileOut<<mas2[i]<<":"<<mas2[i+1]<<" ";
        i+=2;
    }
    fileOut.close();
}
void decod()
{
    ifstream fileIn2;
    fileIn2.open("kod.txt");
    if (!fileIn2.is_open())
    {
        cout<<"Невозможно открыть файл\n";
        exit(1);
    }
    int c;
    int k=0;
    while(!fileIn2.eof())
    {
        c=fileIn2.get();
        if(c==':')
            k++;
    }
    fileIn2.close();
    char* mas = new char[5];
    int* buff = new int[2*k];
    ifstream fileIn3;
    fileIn3.open("kod.txt");
    if (!fileIn3.is_open())
    {
        cout<<"Невозможно открыть файл\n";
        exit(1);
    }
    int s=0;
    while(!fileIn3.eof())
    {
        fileIn3>>mas;
        strtok(mas,":");
        buff[s]=atoi(mas);
        strtok(NULL,"\n");
        buff[s+1]=atoi(mas);
        s+=2;
    }
    fileIn3.close();
    ofstream fileOut1;
    fileOut1.open("decod.txt",ios::out);
    if(!fileOut1.is_open())
    {
        cout<<"Невозможно открыть файл\n";
        exit(1);
    }
    int b;
    s=0;
    while(s<2*k)
    {
        b=buff[s+1];
        for(int j=0;j<b;j++)
            fileOut1<<buff[s]<<" ";
        b=0;
        s+=2;
    }
    cout<<endl;
    fileOut1.close();
}
Из исходного файла числа считываются и кодируются. Но я не могу организовать раскодировку этих чисел. Подскажите пожалуйста где ошибка. Мне кажется что вот тут:
C++
1
2
3
4
5
6
7
8
9
while(!fileIn3.eof())
    {
        fileIn3>>mas;
        strtok(mas,":");
        buff[s]=atoi(mas);
        strtok(NULL,"\n");
        buff[s+1]=atoi(mas);
        s+=2;
    }
Но где я не понимаю...Заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2009, 09:21     Чтение из файла
Посмотрите здесь:

Чтение файла в 16-СС - C++
Здравствуйте, как можно реализовать следующее: Нужно открыть файл для чтения в бинарном режиме, считывать по три байта и записывать их в...

Чтение из файла - C++
Помогите разобраться! Вопрос такой - как читать файл. Я новичок в программировании, прошу сильно не бить. Вот что надумал: #include...

Чтение из файла - C++
Извините, опять этот вопрос, но почему не работает программа? Нужно считать из файла цифры и записать их в матрицу и поменять минимальные и...

Чтение из файла - C++
Необходимо считать последовательность чисел из файла в массив. Есть функция которая это реализует. На вход ей подается имя файла и еще один...

Чтение из файла - C++
Всем привет! чёт я не могу разобраться! есть файл 1.txt с содержимым: 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 0 0 1 ...

Чтение из файла - C++
Подскажите как из txt файла в нутри которого 0x004FE6A4 считать это значение в переменную DWORD? Добавлено через 6 минут Ну то есть...

Чтение файла - C++
Вообщем проблема заключается в том, что при чтении файла и вывод его в консоль, само чтение файла до конца не доходит. В дебаггере...

Чтение файла - C++
Здравствуйте. Подскажите, пожалуйста, как прочитать файл с конца? Т.е. у меня записаны числа в файле 1 2 3 и т.д., а вывод 3 2 1.

Чтение из файла - C++
FILE *fp; char gf, a1, a2, a3; int a, i, j, k; fp = fopen (&quot;database.txt&quot;, &quot;r&quot;); do { fscanf (fp, &quot;% %* % %* %s&quot;, a1,...

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.10.2009, 10:36     Чтение из файла #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdlib>
 
...
 
    fileOut1.open("decod.txt",ios::out);
    long n, count;
    char *p;
    
    while (fileIn3 >> mass) {
        //cout << mass << endl;
        n = strtol(mass, &p, 10);
 
        if (!*p)
            return 1;
 
        count = strtol(p+1, NULL, 10);
        while (count--)
            fileOut1 << " " << n;
    }
это тоже код вперемешку, лучше юзать string, для cpp он удобнее
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
08.10.2009, 20:24  [ТС]     Чтение из файла #3
Спасибо огромное)))
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.10.2009, 03:05     Чтение из файла #4
при маленьком mass может быть segfault в пункте считывания в mass из файла, поэтому mass должен быть больше, чем наибольшая запись, ну 10 или 100
Yandex
Объявления
09.10.2009, 03:05     Чтение из файла
Ответ Создать тему
Опции темы

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