Sortowanie ciągów zawierających liczby w przyjazny dla użytkownika sposób

Przyzwyczajając się do standardowego sposobu sortowania ciągów, byłem zaskoczony, gdy zauważyłem, że Windows sortuje pliki według ich nazw w pewien zaawansowany sposób. Dam ci przykład:

Track1.mp3
Track2.mp3
Track10.mp3
Track20.mp3

Myślę, że te nazwy są porównywane (podczas sortowania) na podstawie liter i liczb oddzielnie.

Z drugiej strony, ta sama lista jest posortowana w standardowy sposób:
Track1.mp3
Track10.mp3
Track2.mp3
Track20.mp3

Chciałbym stworzyć porównujący alogorytm w Delphi, który pozwoliłby mi sortować ciągi w ten sam sposób. Na początku myślałem, że wystarczy porównać kolejne znaki dwóch łańcuchów, gdy są one literami. Gdy w jakiejś pozycji obu strun znajdziemy cyfrę, czytam wszystkie cyfry następujące po nich, aby utworzyć liczbę, a następnie porównać liczby.

Aby dać przykład, porównam ciągi „Track10” i „Track2” w ten sposób:
1) czytaj znaki, gdy są równe, a gdy są literami: „Track”, „Track”
2) jeśli zostanie znaleziona cyfra, przeczytaj wszystkie następujące cyfry: „10”, „2”
2a) jeśli są równe, przejdź do 1 lub zakończ
Dziesięć jest większe niż dwa, więc „Track10” jest większy niż „Track2”

Wydawało się, że wszystko będzie dobrze, dopóki w trakcie testów nie zauważyłem, że Windows uważał „Track010” za niższy niż „Track10”, podczas gdy myślałem, że pierwszy był większy, ponieważ był dłuższy (nie wspominając o tym, że zgodnie z moim algorytmem oba łańcuchy byłyby równe, co jest błędne).

Czy możesz mi powiedzieć, w jaki sposób system Windows sortuje pliki według nazw, a może masz gotowy algorytm (w dowolnym języku programowania), na którym mógłbym bazować?

Wielkie dzięki!
Mariusz

questionAnswers(3)

yourAnswerToTheQuestion