c - 在 C 中对字符串数组使用 qsort

标签 c arrays sorting qsort

我不知道如何使用 qsort。我想对字符串数组进行排序。像这样:

John              Adam
Adam      ->      John
Stacy             Stacy

然而,我所做的一切似乎都不起作用。我已经尝试完全复制其他人使用的内容(来自各种来源的大约 5 个不同的 qsort 函数)但没有任何效果。我有一个用于 int 的工作(向后但至少它工作)。

这是我拥有的必要代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct {
char name[80];
int age;
} RECORD;
RECORD record[25];

int main (int argc, char *argv[80]){     // Using command line to get my strings

    int i = 2, j;
    for(j = 0; j < (argc / 2); j++)      //Converting and storing my ages
    {
        record[j].age = atoi(argv[i]);
        i = i + 2;
    }

    int p, q = 1;
    for(p = 0; p < (argc / 2); p++)
    {
        strcpy(record[p].name, argv[q]);
        q = q + 2;
    }
}

int compareByName(const void* a, const void* b) //The qsort that doesn't work at all
{
    const char *ia = (const char *)a;
    const char *ib = (const char *)b;

    return strncmp(ia, ib, 25);
}

int compareByAge (const void * a, const void * b)  //My other qsort that works backwards
{

    RECORD *RECORDA = (RECORD *)a;
    RECORD *RECORDB = (RECORD *)b;

    return ( RECORDB->age - RECORDA->age );
}

void printRecords(RECORD r[], int num){
//printing stuff here

double size = sizeof r[0];
double count = sizeof(r)/size;          //My qsort with size stuff, doesn't work
qsort(r, count, size, compareByName);   // if I do it the same as the other  

qsort (r, 25, sizeof(RECORD), compareByAge);   //My other qsort that works backwards

//more printing stuff here
}

最佳答案

您没有字符串数组,您有一个 RECORD 数组s,听起来您想根据 name 中的字符串对该数组进行排序记录数组。所以你想要这样的东西:

int compareByName(const void *a_, const void *b_) {
    RECORD *a = a_, *b = b_;

    return strcmp(a->name, b->name);
}

然后你用

排序
qsort (r, 25, sizeof(RECORD), compareByName);

关于c - 在 C 中对字符串数组使用 qsort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31017023/

相关文章:

ruby-on-rails - Rails:使用 Decoder::Countries[:US].states 使用美国各州和缩写填充选择列表

algorithm - 有人可以向我解释为什么插入排序的最坏情况是 O(n^2) 吗?

sorting - jqgrid 日期排序和格式化

javascript - 为什么 JavaScript 的后自增运算符与 C 和 Perl 不同?

c# - 返回一个长度为 n 的 int 数组,其中包含 pi 的前 n 位数字? (C#)

c++ - 当线程/进程处于 sleep 状态时, sleep 线程或进程的指令是否继续执行?

arrays - Ruby 单词数组

arrays - 带有多个属性上的对象的 typescript 排序数组

c++ - 栈和队列是线性数据结构还是非线性数据结构?

c - 这段代码是否违反了严格的别名规则?