0

我正在尝试从输入文本中制作香农代码生成器,但我遇到了一些麻烦......

所以,有一些简单的狗屎代码

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;
        }    

计算所有 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 上的第一次提交。

4

1 回答 1

5

使用而[]不是数组:()new

double * cumulative = new double [k];
                                 ^ ^

(k)只需在内存中创建一个位置并将其初始化为,k而不是创建一个具有 size 的数组k

 

用于[]删除数组:

delete [] mass;
       ^^

 

您正在使用k,但我看不到您在哪里初始化它?!

for (int i=0; i<k; i++)

 

最好使用std::vector而不是自定义数组来避免上述问题。

于 2013-05-26T16:06:33.030 回答