我正在尝试根据输入文本制作香农代码生成器,但我遇到了一些麻烦...
所以,有一些简单的狗屎代码
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;
}
所以,我有一些麻烦。 如果文本很小,那么我会在 praogram 终止时捕获未处理的异常。 如果文本很大,大约有 100 多个符号,我在 __**__ 有异常(exception)。
你有什么建议,为什么会这样?
对于大代码感到抱歉,这是我在 StackOverFlow 上的第一次提交。
最佳答案
使用 []
而不是 ()
至 new
数组:
double * cumulative = new double [k];
^ ^
(k)
只需在内存中创建一个位置并将其初始化为 k
而不是制作大小为 k
的数组.
使用 []
用于删除数组:
delete [] mass;
^^
您正在使用 k
, 但我看不到你在哪里初始化它?!
for (int i=0; i<k; i++)
最好用std::vector
而不是自定义数组以避免上述问题。
关于C++ 未处理的异常。这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16761070/