c - 如何根据另一个序列重新排列 char 数组(这是一个按升序排序的 float 组)?

标签 c

在一项作业中,我的任务是创建综合诊所患者出勤查看器。我获得了以下数据:给定年份 4 个不同案例的出勤率。对于这个项目,我们要完成5个功能。我已经下降了 4 个,但我仍然无法理解 1。根据问题,我必须显示“今年案件的最低到最高百分比和案件名称”。我了解冒泡排序,并且能够按升序排列百分比。然而,我很难做的是根据我能得到的升序显示案例的名称。

我尝试创建一个 2D 字符数组,其中包含 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() (原型(prototype)位于 <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/

相关文章:

c - 允许自定义 printf 的 %n$ 操作数

c - pthread 是如何工作的?

c - 下面声明的类型不应是不完整类型的声明是什么意思

c - 为什么我的 C 代码无法识别结构数组并重复用户输入?

c - `off_t` 之前的预期表达式

C 中的命令行参数计数

c - 数组数据指向另一个数组中的另一个位置

c - 确定驱动模块所在的位置(内存地址)

objective-c - Float 和 int 数据类型影响性能

c - 无法在 c 中解析结构成员