Twoim problemem jest to, że masz interpretację części nazwy pliku.
W porządku leksykograficznym Slide1
jest przed Slide10
, który jest przed Slide5
.
Oczekujesz Slide5
przed Slide10
jak masz interpretację podciągi 5
i 10
(jako liczby całkowite).
Będziesz mieć więcej problemów, jeśli masz nazwę miesiąca w nazwie pliku i spodziewałbyś się, że będą one uporządkowane według daty (tj. W styczniu przed sierpniem). Będziesz musiał dostosować sortowanie do tej interpretacji (a "naturalna" kolejność będzie zależeć od twojej interpretacji, nie ma żadnego ogólnego rozwiązania).
Innym podejściem jest formatowanie nazw plików w sposób zgodny z sortowaniem i zgodnością leksykograficzną. W twoim przypadku użyjesz wiodących zer i stałej długości dla numeru. Tak więc Slide1
staje się Slide01
, a następnie zobaczysz, że ich sortowanie leksykograficzne da wynik, który chciałbyś mieć.
Jednak często nie można wpłynąć na wyjście aplikacji, a tym samym nie można wymusić bezpośrednio formatu.
Co robię w takich przypadkach: napisz mały skrypt/funkcję, która zmienia nazwę pliku na prawidłowy format, a następnie użyj standardowych algorytmów sortowania, aby je posortować. Zaletą tego jest to, że nie musisz dostosowywać sortowania i możesz używać istniejącego oprogramowania do sortowania. Z drugiej strony są sytuacje, w których nie jest to możliwe (nazwy plików muszą być ustalone).
Porównując, najpierw wyodrębnij liczby z obu ciągów, a następnie porównaj liczby. – wimh
@Wimmel: Powoduje, że wszystkie nazwy plików mają ten sam prefiks, co, jak zakładam, niekoniecznie musi mieć miejsce. Opiera się również na wszystkich nazwach plików zawierających dokładnie jeden (nie zero, nie dwa) komponenty numeryczne. – NPE
Niepowiązane: po co kopiować ciągi do zamiany? Po prostu zamień wskaźniki (i istnieje 'std :: swap' ...). –