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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2012, 21:27   #1
guzel20
Пользователь
 
Аватар для guzel20
 
Регистрация: 05.12.2012
Сообщений: 25
По умолчанию RLE шифрование

Добрый вечер.
Моя задача - зашифровать строку методом RLE.
Например, есть строка - "qqwweee". В зашифрованном виде она будет выглядеть так - "2q2w3e"

Есть программа, но при запуске она у меня падает, выдавая ошибку "string subscript out of range"

Код:
#include <iostream>
#include <string>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <sstream>

using namespace std;

string encode(string s) {
	int i = 0; 
	string newS;
	while (i < s.length()){
		int j = i;
		while (s[i] == s[j + 1]) 
			++j;
		if (j - i == 0 || j - i == 1 || j - i == 2) {
			newS = newS + s[i];
			if (s[i] == '0') 
				newS = newS + '0';
			++i;
		} else {
			stringstream num;
			num << j - i + 1;
			newS = newS + num.str() + s[i];
			i += j - i + 1;
		}
	}
	return newS;
}

int main() {
	setlocale(LC_ALL,"Russian");
	string s = "";
	cout << "Введите строку: ";
	cin >> s;
	encode(s);
	cout << "\nЗашифрованная строка: ";
	cout << s;
	_getch();
	return 0;
}
Помогите пожалуйста
Очень срочно мне нужно исправить эту ошибку.

Последний раз редактировалось guzel20; 05.12.2012 в 21:50.
guzel20 вне форума Ответить с цитированием
Старый 06.12.2012, 10:05   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я, к сожалению, я не владею этим "птичьим" языком C/C++, поэтому по сути мне сказать нечего.

Хочу только обратить ваше внимание на ошибку, которую Вы делаете, путая понятия:
"шифрование" совсем не то же самое, что "кодирование".
В данном случае речь идёт о КОДИРОВАНИИ информации.
Рекомендую не путать...

А так, желаю успехов в разработке.

Цитата:
"string subscript out of range"
да. очевидно, что ошибка заключается в том, что Вы где-то "вылазите" за пределы строки.
Это может быть где угодно. Например, в этом цикле: while (s[i] == s[j + 1]) ++j;
Вы j наращиваете, вообще не проверяя, вышли за пределы длины строки или нет.
Тщательная отладка (как в уме, так и в отладчике кода) поможет Вам...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.12.2012, 13:02   #3
guzel20
Пользователь
 
Аватар для guzel20
 
Регистрация: 05.12.2012
Сообщений: 25
По умолчанию

Спасибо за ответ
guzel20 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RLE - шифрование [C/C++] MooNDeaR Помощь студентам 2 27.05.2012 10:43
RLE кодирование KrisPipis Помощь студентам 0 05.04.2011 19:27
RLE компресія на с++ mato Общие вопросы C/C++ 1 25.03.2011 19:00
RLE JScript. dixonich Помощь студентам 7 11.11.2010 23:09
RLE FeNiX_IU8 Помощь студентам 1 29.10.2009 17:54