[c] qsort funkcja porownujaca

0
 
int compare(char* s1, char *s2)
{
    int com;
    
    while(*s1=='0'){s1++;}
    while(*s2=='0'){s2++;}
   
    if(strlen(s1) > strlen(s2)){com = 1;}
    if(strlen(s1) < strlen(s2)){com = -1;}
    if(strlen(s1) == strlen(s2)){com = strcmp(s1, s2);}

    return com;
}

Witam. Mam problem z funkcja powrownujaca w qsorcie. Otoz musi ona przyjmowac i sortowac liczby w formie zwyklej takiej jak 563543543 czy 00054353453 ale takze z przecinkami np 443,432,423 . Przecinki musza byc odrzucane i qsort musi to traktowac jak normalna liczbe tj 443432423. Nie mam za bardzo pomyslu jak to zrobic, bylbym wdzieczny za pomoc :)

0
  1. Użyj else ifów, albo od razu dawaj return. Zapobiegniesz bezsensownemu sprawdzaniu warunków w ifie. Ostatni warunek stanie się niepotrzebny w ogóle, bo będzie zawsze zachodził, gdy poprzednie nie będą.
  2. Zastąp strcmp własną funkcją porównującą.
  3. Rozumiem, że twoja funkcja działa tylko dla liczb. Bo inaczej zwracanie -1 czy 1 bez porównywania zawartości jest nieprawidłowe.
0

Tak qsort ma sortowac tylko liczby. Co do wlasnej wersji funkcji strcmp to ok, ale wciaz nie mam pomyslu jaki wrzucic tam warunek aby pomijal te przecinki :/

0

To będzie coś w stylu:

  1. Pomiń przecinki (tak samo jak pomijasz wiodące zera)
  2. Jeżeli str1[i] i str2[j] równe \0 to return 0
  3. Jeżeli str1[i] i str2[j] równe to pętla do 1
  4. Zwróć str1[i] < str2[j] ? 1 : -1
0

A o ile dobrze pamiętam to do qsort()'a dostarczamy funkcję przyjmującą 2 wskaźniki na void.

1 użytkowników online, w tym zalogowanych: 0, gości: 1