【发布时间】:2021-07-25 16:24:30
【问题描述】:
我正在尝试将具有绝对值的直方图转换为显示用户编写的字符串中字母的相对频率的直方图。字母频率应以 * 表示。因此,如果字母“A”占字符串的 1%,则应该有两个 *。 1% = 两个 *。
尝试计算频率时,输出为零。我真的不明白为什么。
我试图搜索互联网,但我真的找不到对我有帮助的东西。我想我的头脑和编码都陷入了困境。
这是我的三个函数的代码:
void berakna_histogram_abs(const string inm, int arr[ANTAL_BOKSTAVER]){
int i, j = 0;
while (inm[i] != '\0'){
if (inm[i] >= 'a' && inm[i] <= 'z'){
j = inm[i] - 'a';
++arr[j];
}
if (inm[i] >= 'A' && inm[i] <= 'Z'){
j = inm[i] - 'A';
++arr[j];
}
i++;
}
}
void abs_till_rel(int arr[ANTAL_BOKSTAVER], int (&ree)[ANTAL_BOKSTAVER]){
for(int i = 0; i < ANTAL_BOKSTAVER; i++) {
ree[i] = arr[i] / 26;
printf("%c %lf \n", i + 'a', ree[i]);
}
for (int x = 0; x < ANTAL_BOKSTAVER; x++){
}
}
void plotta_histogram_rel(int (&ree)[ANTAL_BOKSTAVER]){
cout << "Frekvensen av bokstäver i texten är: " << endl;
for (int i = 0; i < ANTAL_BOKSTAVER; i++){
cout << char(i + 'a') << " : " << ree[i] << endl;
}
}
我不能在第三个函数中做任何计算,那只是为了写直方图。整个程序很大,如果你愿意,我会提供所有代码。
非常感谢任何帮助。
谢谢!
【问题讨论】:
-
在
void abs_till_rel(int arr[ANTAL_BOKSTAVER], int ree[ANTAL_BOKSTAVER], int frekvens){中,您传递的是数组的副本(您是按值传递它们),因此在修改它们时,您不会修改原始数组。尝试通过引用传递结果:void abs_till_rel(int arr[ANTAL_BOKSTAVER], int &ree[ANTAL_BOKSTAVER], int &frekvens){ -
你应该通过返回结果来实现,而不是通过参数修改它们。
-
谢谢!好的,所以也许 abs_till_rel 应该是 int 而不是 void?返回“frekvens”(=英语频率)。
-
您可以返回
pair或自定义struct,还有其他几种可能。 -
“我会提供所有代码” -- 请不要。问题应该有最少 数量的代码来重现问题(因此命名为“minimal reproducible example”)。虽然有时真正最小的代码是不合理的(因为它需要知道问题的答案),但您应该能够接近。一旦你有足够的代码来重现问题,不要无缘无故地添加更多。 (您可以通过将问题中的内容复制到新项目(或在线编译器)然后编译并运行来查看您是否有足够的代码。如果问题出现,则说明您有足够的代码。)