对于一项任务,我的任务是创建一个多诊所患者出勤查看器。我得到了以下数据:给定年份中4种不同病例的出勤率。对于该项目,我们必须完成5个功能。我的排名下降了4,但我仍然无法保持1的头脑。根据这个问题,我必须显示“案件的最低到最高百分比和年份名称”。我了解气泡排序,并且能够按升序排列百分比。但是,我要做的就是按照我能得到的升序显示案件名称。
我试图创建一个2D char数组,其中包括4种情况的名称,以及一个包含百分比的float数组。然后包括在排序算法的“交换”部分中,我也尝试与char数组进行交换。
float year2010Cases[4] = { 11.2,8.9,15.6,15.9 };
char caseName[4][28] = { "Respiratory Tract Infection", "Diabetes
Mellitus","Hyperlipidemia","Hypertensive Disease" };
char swap[1][28];
#include <stdio.h>
void main(void)
{
int c, d;
float temp;
char swap[1][28];
for (c = 0; c < 3; c++)
{
for (d = 0; d < 3 - c; d++)
{
if (year2010Cases[d] > year2010Cases[d + 1])
{
temp = year2010Cases[d];
year2010Cases[d] = year2010Cases[d + 1];
year2010Cases[d + 1] = temp;
swap[1][28] = caseName[d][28];
caseName[d][28] = caseName[d + 1][28];
caseName[d + 1][28] = swap[1][28];
}
}
}
printf("Sorted list in ascending order:\n");
for (c = 0; c < 4; c++)
printf("%.1f\n", year2010Cases[c]);
printf("Sorted list in ascending order:\n");
for (c = 0; c < 4; c++)
printf("%s \n", caseName[c][28]);
}
我希望案例名称以与百分比相同的顺序显示,因为它们在交换百分比的同时交换。但是,对于我的实际结果,它在第二个“按升序排列的列表:\ n”之下根本不显示任何内容。
最佳答案
要交换字符串,您需要strcpy()
(<string.h>
中的原型)
//swap[1][28] = caseName[d][28];
//caseName[d][28] = caseName[d + 1][28];
//caseName[d + 1][28] = swap[1][28];
strcpy(swap[0], caseName[d]);
strcpy(caseName[d], caseName[d + 1]);
strcpy(caseName[d + 1], swap[0]);
另请注意,
swap[1]
和casename[j][28]
不存在。让我添加一个建议(对于评论来说太长了):请对索引进行排序。
int indexes[] = { 0, 1, 2, 3 };
// sort indexes <== YOUR TASK
// indexes now is { 1, 0, 2, 3 }
for (i = 0; i < 4; i++) {
printf("%f for %s\n", year2010Cases[indexes[i]], caseName[indexes[i]]);
}
关于c - 如何根据另一个序列重新排列一个char数组(这是一个按升序排序的float数组)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54501318/