Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 16:11   #1
mato
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 57
По умолчанию rle - компресія непонятние символи в выходном файле как исправить

помогите найти решения проблемы есть программа rle компрессии на с++
Код:
int main(int argc, char* argv[])
{ FILE *Pfile1 = fopen("test2.txt","rb");
		if(Pfile1 == NULL)
		{
			cout <<"eror opening"<<endl;
		return 1;
		}
	FILE *Pfile = fopen("test.txt","wb");
		if(Pfile == NULL)
		{
			cout <<"eror opening"<<endl;
		return 1;
		}
char ch,ch1;
int pt1 =0;
int key=0;


		
		while((ch = fgetc(Pfile1))!=EOF)
		{
			if(ch == key)
				Pfile1+1;
			else
			{
			
 			FILE *Pfile2 = fopen("test2.txt","rb");
		if(Pfile2 == NULL)
		{
			cout <<"eror opening"<<endl;
		return 1;
		}
			while((ch1 = fgetc(Pfile2))!=EOF)
		  { 
			if(ch==ch1)
		
			pt1++;
			else if(pt1 == 1)
			break;
		 
		   }fclose(Pfile2);
			     
		
				if(pt1 >1)
				{
					fputc(pt1,Pfile);
			      fputc(ch,Pfile);
			      pt1=0;
				  
			    }
				else if(pt1<=1)
				{
			     fputc(ch,Pfile);
				 pt1=0;
				}
			
		key = ch;
			}}
		fclose(Pfile1);
		Pfile1 = NULL;
		fclose(Pfile);
		Pfile = NULL;
		return 0;
}
и после завершения в файле test.txt появляются какие то не понятие знаки должно би бить "3a2b2v" а есть "%a&bv" цифри не передаются переменная pt1 не передайот цифри в функции fgetc(pt1,pfile) я конечно понимаю что нодо перевести pt1 в строку но после перевода компилятор видает ошибку
mato вне форума Ответить с цитированием
Старый 05.04.2011, 16:14   #2
mato
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 57
По умолчанию

и как доделать программу чтоб она воспринимала больше 255 однакових символом
mato вне форума Ответить с цитированием
Старый 05.04.2011, 17:12   #3
XxXGhosTXxX
Пользователь
 
Аватар для XxXGhosTXxX
 
Регистрация: 03.03.2011
Сообщений: 93
По умолчанию

Цитата:
Сообщение от mato Посмотреть сообщение
и как доделать программу чтоб она воспринимала больше 255 однакових символом
char ch,ch1 [256];

Например если пишешь char a; , то ты можешь писать 1 символ.А если пишешь например char a [256] или char a [50] , то ты можешь писать 256 или 50 символ.
XxXGhosTXxX вне форума Ответить с цитированием
Старый 05.04.2011, 17:14   #4
XxXGhosTXxX
Пользователь
 
Аватар для XxXGhosTXxX
 
Регистрация: 03.03.2011
Сообщений: 93
По умолчанию

[QUOTE=mato;772036]помогите найти решения проблемы есть программа rle компрессии на с++
Код:
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
using namespace std;
int main()
{ FILE *Pfile1 = fopen("test2.txt","rb");
		if(Pfile1 == NULL)
		{
			cout <<"eror opening"<<endl;
		return 1;
		}
	FILE *Pfile = fopen("test.txt","wb");
		if(Pfile == NULL)
		{
			cout <<"eror opening"<<endl;
		return 1;
		}
char ch,ch1;
int pt1 =0;
int key=0;


		
		while((ch = fgetc(Pfile1))!=EOF)
		{
			if(ch == key)
				Pfile1+1;
			else
			{
			
 			FILE *Pfile2 = fopen("test2.txt","rb");
		if(Pfile2 == NULL)
		{
			cout <<"eror opening"<<endl;
		return 1;
		}
			while((ch1 = fgetc(Pfile2))!=EOF)
		  { 
			if(ch==ch1)
		
			pt1++;
			else if(pt1 == 1)
			break;
		 
		   }fclose(Pfile2);
			     
		
				if(pt1 >1)
				{
					fputc(pt1,Pfile);
			      fputc(ch,Pfile);
			      pt1=0;
				  
			    }
				else if(pt1<=1)
				{
			     fputc(ch,Pfile);
				 pt1=0;
				}
			
		key = ch;
			}}
		fclose(Pfile1);
		Pfile1 = NULL;
		fclose(Pfile);
		Pfile = NULL;
		return 0;
}

Как я понял, ты должен сoздать test2.txt в соурс папке, и когда программа откроится, он копирует текст из test2.txt в нових test.txt

Тебе это нужен?

Последний раз редактировалось XxXGhosTXxX; 05.04.2011 в 17:26.
XxXGhosTXxX вне форума Ответить с цитированием
Старый 05.04.2011, 18:12   #5
mato
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 57
По умолчанию

да но чтоб подчас копирования в test.txt било жатая копия методом rle
например если есть текст aaaammmmbbbb то в test должно бить 4a4m4b
mato вне форума Ответить с цитированием
Старый 05.04.2011, 18:14   #6
mato
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 57
По умолчанию

Цитата:
Сообщение от XxXGhosTXxX Посмотреть сообщение
char ch,ch1 [256];

Например если пишешь char a; , то ты можешь писать 1 символ.А если пишешь например char a [256] или char a [50] , то ты можешь писать 256 или 50 символ.
ну ето уже масиви я потом с ними что делать буду
mato вне форума Ответить с цитированием
Старый 05.04.2011, 18:20   #7
mato
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 57
По умолчанию

проблема в том что перменая pt1 при передачи в функцию fputch(pt1,Pfile) дает непонятний символ в файле test.txt вместо числа
mato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RLE компресія на с++ mato Общие вопросы C/C++ 1 25.03.2011 19:00
RLE JScript. dixonich Помощь студентам 7 11.11.2010 23:09
что должно быть в выходном файле Freedom007 Паскаль, Turbo Pascal, PascalABC.NET 2 16.06.2010 21:02
RLE FeNiX_IU8 Помощь студентам 1 29.10.2009 17:54