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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Присваивание... http://www.cyberforum.ru/cpp-beginners/thread55089.html
char f = 300; cout << f; system("PAUSE"); char f = 300; int s = f; cout << f; system("PAUSE");
C++ Трассировка программы Добрый вечер Форумчане. Не могу провести трассировку программы на С. Кто-нибудь сталкивался с трассировкой? #include <conio.h> #include <iostream.h> #include <math.h> struct point //структура координаты { float x; http://www.cyberforum.ru/cpp-beginners/thread55083.html
Масив объектов C++
Вот читаю тему массив объектов. набрал небольшой код, но программ не идёт. #include <iostream> using namespace std; class MyClass { int x; public: void set_x(int i) { x = i ; } int get_x() { return x; }
Динамический массив структур C++
Реализовать программу для хранения информации о пациентах больницы. Предусмотреть следующие поля: ФИО, диагноз, Для пациентов, стационарно находящихся в больнице указать номер палаты, последнюю измеренную температуру, назначенные лекарства. Для пациентов, находящихся на домашнем лечении указать домашний адрес, дату последнего посещения. Предусмотреть отображение всех пациентов, добавление и...
C++ Ошибки после компиляции http://www.cyberforum.ru/cpp-beginners/thread55061.html
Дана задача(дословно): дан массив целых положительных чисел, переписать простые числа во второй массив; упорядочить массивы 1-й по возрастанию 2-й по убыванию. Создать функции для определения простого числа и для сортировки. Писал на C++ Builder 2007 (пробовал на других компах: под Windows 7 в VS 2009 тоже кието ошибки и под XP тоже на C++ Builder 2007) компилируется без ошибок и...
C++ программку написать плиззз пожалуйста помогите программа по зарез нужна чтоб на borland c++ 4.5 работала подробнее

Показать сообщение отдельно
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
08.10.2009, 09:21     Чтение из файла
Есть задание: написать программу,которая считывыает числа из файла, написанные в нем через пробел. Числа кодируются и записываются в новый файл. Кодируются следующим образом: повторяющие числа, идущие друг за другом, заменяются одним этим числом и через двоеточие указывается количество повторений этого числа. Далее нужно считать числа кодированные числа из файла и раскодировать их обратно, записав раскодированные числа в новый файл. Тем самым числа в первом и последнем файле должны быть идентичны.
Пример:
Исходный файл: 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;
    }
Но где я не понимаю...Заранее спасибо)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru