Как отсортировать массив по длине каждой цифры? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть такой массив:

arr[] = {0010,1,001,01}

Мне нужно отсортировать массив в порядке возрастания на основе количества имеющихся у него цифр, вывод должен быть:

arr[] = {1,01,001,0010}

Я попытался получить количество цифр каждого элемента и сохранить его в другом массиве, например:

digits[] = {4,1,3,2} 

И когда я сортирую digits[], он должен отражаться в arr[]

1 Ответ

0 голосов
/ 18 сентября 2018

Вы можете использовать qsort с настраиваемой функцией сравнения следующим образом:

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

const char* arr[] = {"0000","0","000","00"};


int myCompare (const void * a, const void * b ) {
    const char *pa = *(const char**)a;
    const char *pb = *(const char**)b;

    return strcmp(pa,pb);
    // or as below if you compare length only
    /*
     return strlen(pa)-strlen(pb);
    */
}

int main() {
    int i;

    int stringLen = sizeof(arr) / sizeof(char *);
    qsort(arr, stringLen, sizeof(char *), myCompare);

    for (i=0; i<stringLen; ++i)
        printf("%d: %s\n", i, arr[i]);
}

вывод будет:

0: 0    
1: 00   
2: 000  
3: 0000 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...