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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2012, 03:42   #1
litviak
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 19
По умолчанию Алгоритм Лемпела-Зивы

Уходил в бесконечный цикл и на выходе один буквы M(в outcode.txt: 0M0M0M0M0M). В чем проблема?
Код:
#include <vector>
#include <string>
#include <iostream>
#include <fstream>
#include <utility>
#include <algorithm>

using namespace std;

class lz{
	char it;
	string buff;
public:
	lz(){
	};
	~lz(){
	};
	void compress(){
		ifstream fin("input.txt");
		ofstream fout("outcode.txt");
		vector<string> table;
		int num=0,findval,prevval=0;
		table.push_back("");
		do{
		buff="";
		findval=0;
		do{
			prevval=findval;
			fin>>it;
			buff+=it;
			cout<<"!";
			findval=find(table.begin(),table.end(),buff)-table.begin();
		}while(findval!=table.end()-table.begin());
		table.push_back(buff);
		fout<<prevval<<it;
		}while(!fin.eof());
	};
	void decompress(){
		ifstream fin("outcode.txt");
		ofstream fout("output.txt");
		vector<string> table;
		table.push_back("");
		int num;
     while (!fin.eof( )){
		buff=table[0];
		fin>>num>>it;
		buff=table[num]+it;
		table.push_back(buff);
		fout<<buff;
	};
	};
};
void main(){
	lz a;
	a.compress();
	a.decompress();
};

Последний раз редактировалось litviak; 13.05.2012 в 13:14. Причина: добавил do{}while(!fin.eof())
litviak вне форума Ответить с цитированием
Старый 13.05.2012, 08:17   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

А оператор do{}while(), Вас не учили использовать?

Код:
do{
		buff=table[0];
		fin>>num>>it;
		buff=table[num]+it;
		table.push_back(buff);
		fout<<buff;
}while(it!='EOF');
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 13.05.2012, 12:03   #3
litviak
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 19
По умолчанию

Сделал правильный do{}while работает, спасибо.
Но почему то съедает все пробелы...
fin.get() все работает, спасибо.

Последний раз редактировалось litviak; 13.05.2012 в 13:24.
litviak вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разветвляющийся алгоритм,циклический алгоритм и Многомерные массивы (Pascal) TrapperPTZ Помощь студентам 1 26.01.2012 08:58
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм. iamhated Помощь студентам 1 15.01.2012 16:24
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм iamhated Помощь студентам 1 14.01.2012 16:22
Алгоритм TMDS (Алгоритм передачи данных интерфейса DVI) Pro4RE Помощь студентам 2 24.04.2011 21:55
Волновой алгоритм (алгоритм Ли) MrRockchip Общие вопросы C/C++ 4 10.05.2010 13:26