я пытаюсь сделать создатель кода Шеннона из входного текста, и у меня есть некоторые проблемы …
Итак, есть простой дерьм-код
int main()
{
string x="this is very big text.";
int temp;
int N = x.length();
int *mass = new int [N];
затем считать символы в тексте;
затем подсчет символов, которые использовались из таблицы ASCII;
создание 2 новых массивов с символами и счетчиками символов, но их размер значительно меньше;
удалить старый символ массива delete mass;
сортировать их по счетчикам и подсчитывать их совокупную вероятность;
double * cumulative = new double (k);
double temp=int_mass[0];
cumulative[0]=0;
for (int i=1; i<k; i++)
{
temp=int_mass[i-1];
cumulative[i]=cumulative[i-1]+temp/N;
}
cout’ing все 3 массива
double a,b,n;
n=N;
for (int i=0; i<k; i++)
{
b=int_mass[i];
b/=n;
cout<<char_mass[i]<<" ";
cout<<b<<" "; //**__**__**
cout<<cumulative[i]<<endl;
}
Итак, у меня есть некоторые проблемы.
если текст маленький, то я улавливаю необработанное исключение по окончании пограммы.
если текст большой, около 100+ символов, у меня есть исключение в __ ** __.
у вас есть предложения, почему это происходит?
извините за большой код, это мой первый коммит на StackOverFlow.
использование []
вместо ()
в new
массивы:
double * cumulative = new double [k];
^ ^
(k)
просто делает одно место в памяти и инициализирует его k
вместо создания массива с размером k
,
использование []
для удаления массивов:
delete [] mass;
^^
Вы используете k
, но я не вижу, где вы его инициализировали ?!
for (int i=0; i<k; i++)
Лучше использовать std::vector
вместо самоопределенных массивов, чтобы избежать вышеуказанных проблем.
Других решений пока нет …