排序后如何将字符串与适当的整数连接起来?

How to connect a string with the appropriate integer after sorting?

有人可以用 C 语言帮助我解决这个问题吗?我需要按字母顺序和分数对排行榜进行排序,这很有效。我使用 atoi() 将字符串转换为整数,但名称保持原样。这是排序函数:

void bubbleSort2(int arr[], int n)
{
    int c,d;
    int swap;
    for (c = 0; c < n - 1; c++)
    {
        for (d = 0; d < n - c - 1; d++)
        {
            if (arr[d] < arr[d + 1])
            {
                swap = arr[d];
                arr[d] = arr[d + 1];
                arr[d + 1] = swap;
            }
        }
    }
}

void sortScores() {
    FILE* fp = openFile();
    int x[128];
    char line[128][20];
    int i = 0, j = 0;
    int tot = 0;
    while (fgets(line[i], 20, fp))
    {
        line[i][strlen(line[i]) - 1] = '[=10=]';
        i++;
    }
    tot = i;
    for (int i = 0; i < tot; i++)
    {   
        char* sep = strchr(line[i], ' ');
        *sep = '[=10=]';
        x[i] = atoi(sep + 1);
    }
    bubbleSort2(x, tot);
    printf("Sorted by scores:\n");
    for (int i = 0; i < tot; i++)
    {
        printf("%s %d\n", line[i],x[i]);
    }
    fclose(fp);
}

这是输出:

Sorted alphabetical:
Branimir 100
Branimir 700
Brekalo 100
Hrvoje 350
Ilija 0
Ilija 50
Marin 100
Marin 400
Marko 0
Marko 300
Matej 0
Matej 900
Nikola 0
Pero 100
Pero 150
Ramal 100
Simun 550
Skoric 0

Sorted by scores:
Ramal 900
Ilija 700
Ilija 550
Pero 400
Pero 350
Nikola 300
Marko 150
Marin 100
Marko 100
Marin 100
Matej 100
Branimir 100
Matej 50
Branimir 0
Brekalo 0
Skoric 0
Hrvoje 0
Simun 0

Matej 应该排在第一位,而不是 Ramal。我希望你能帮我解决这个问题。

您只是对值而不是名称进行排序。

同时更改排序函数中char line[128][20]的索引。

在main函数中传递bubbleSort2(x, tot,line);

在冒泡排序中

void bubbleSort2(int arr[], int n,char line[128][20])
{
    int c,d;
    int swap;
    for (c = 0; c < n - 1; c++)
    {
        for (d = 0; d < n - c - 1; d++)
        {
            if (arr[d] < arr[d + 1])
            {
                swap = arr[d];
                arr[d] = arr[d + 1];
                arr[d + 1] = swap;
                swap(line[d],line[d+1]);
            }
        }
    }
}

希望对您有所帮助:)

您需要使用结构来存储您的数据。

#define MAXNAME 20

typedef struct
{
    int score;
    char name[MAXNAME];
}student;

void bubbleSort2(student arr[], size_t n)
{
    /* ..... */
    if (arr[d].score < arr[d + 1].score)

    /* etc etc */
}