How to sort by numbers a mixed pair of string and number elements in an array with C

1 Answer

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

int extract_number(const char *s) {
    const char *p = strrchr(s, ' ');   // find last space
    
    return atoi(p + 1);                // convert number after it
}

int cmp(const void *a, const void *b) {
    const char *sa = *(const char **)a;
    const char *sb = *(const char **)b;

    int na = extract_number(sa);
    int nb = extract_number(sb);

    return na - nb;   // ascending order
}

int main(void) {
    const char *arr[] = {
        "Python 4", "C 9", "C++ 5", "C# 6",
        "Java 1", "PHP 7", "Go 2"
    };

    size_t n = sizeof(arr) / sizeof(arr[0]);

    qsort(arr, n, sizeof(char *), cmp);

    for (size_t i = 0; i < n; i++)
        printf("%s\n", arr[i]);

    return 0;
}



/*
run:

Java 1
Go 2
Python 4
C++ 5
C# 6
PHP 7
C 9

*/

 



answered Jan 22 by avibootz

Related questions

...