c++ - 似乎无法让我的结构数组正确排序?
问题描述
我有一个 letterData 结构数组,标题如下:
struct letterData
{
char letter = '0';
double occurrencePercent = 0;
int letterOccurrences = 0;
};
int main()
{
letterData letters[26];
}
我正在尝试按occurrencePercent 成员对这个结构数组进行排序,如下所示:
do
{
bool swapped = false;
for (int count = 0; count < 25; count++)
{
if (letters[count].occurrencePercent < letters[count + 1].occurrencePercent)
{
swap(letters[count], letters[count + 1]);
swapped = true;
}
}
} while (swapped);
int width = 0;
for (int count = 0; count < 25; count++)
{
if (letters[count].occurrencePercent == 0)
width = 36;
else
width = 30;
cout << "\n" << letters[count].letter << ": " << letters[count].occurrencePercent << '%';
cout << right << setw(width) << standLetters[count].letter << ": " << standLetters[count].occurrencePercent << '%';
}
另外,这是我的交换功能:
void swap(struct letterData& a, struct letterData& b)
{
struct letterData temp;
temp = a;
a = b;
b = temp;
}
但是,数组没有正确排序。这是调试器的样子:
Given Letter Frequency Standard Letter Frequency
b: 8.05085% e: 12.02%
a: 1.69492% t: 9.1%
d: 2.54237% a: 8.12%
c: 0% o: 7.68%
f: 2.54237% i: 7.31%
g: 8.47458% n: 6.95%
h: 11.0169% s: 6.28%
i: 1.69492% r: 6.02%
e: 0% h: 5.92%
k: 4.23729% d: 4.32%
l: 2.54237% l: 3.98%
m: 2.54237% u: 2.88%
n: 1.27119% c: 2.71%
o: 5.50847% m: 2.61%
p: 9.32203% f: 2.3%
q: 8.47458% y: 2.11%
r: 5.50847% w: 2.09%
s: 1.69492% g: 2.03%
t: 6.77966% p: 1.82%
u: 1.27119% b: 1.49%
v: 1.27119% v: 1.11%
w: 8.05085% k: 0.69%
x: 5.50847% x: 0.17%
j: 0% q: 0.11%
y: 0% j: 0.1%
在左栏中,最高百分比应位于顶部,反之亦然。为什么它不起作用?
解决方案
对于您的原始函数,我必须对其进行正确编译和排序的唯一更改是将 swapped 的声明移到 do...while 循环之外。
我的怀疑是您在代码中的其他地方声明了该变量,这避免了编译错误,但是第二个声明掩盖了您的变量,并且 do...while 没有正确检测到交换已经发生并且只执行了一次通过在循环上。
bool swapped = false;
do
{
swapped = false;
for (int count = 0; count < 25; count++)
{
if (letters[count].occurrencePercent < letters[count + 1].occurrencePercent)
{
swap(letters[count], letters[count + 1]);
swapped = true;
}
}
} while (swapped);
推荐阅读
- c++ - 如何继承 QRunnable 来运行任何成员函数?
- node.js - 使用 Node.JS 对 SOAP 的 API 访问,脚本不起作用
- java - 使用clojure通过java互操作从数据集对象调用groupBy方法
- python - 对错误感到困惑:IndexError:列表分配索引超出范围
- android - 可视化 Android 内置 Drawable 的网页
- python - 如何修复不工作的 Tkinter 嵌套框架;它不允许小部件
- javascript - 使用 chart.js 时,自定义工具提示在渲染后立即消失
- sql - 如何将 hive 数据导出为 csv 或 txt
- isabelle - 类型变量作为语言环境
- django-static - 尽管我在 settings.py 文件中设置了静态 URL、Root、Dirs,但为 CSS 文件获取 HTTP 404