2010-01-09 6 views
0

J'ai besoin de trier les noms de fichiers qui peuvent avoir une racine commune, mais sont suivis par des nombres qui ne sont pas nécessairement rembourrés uniformément; Un exemple est ce que vous obtenez lorsque vous renommez plusieurs fichiers dans Windows.Comment faire pour trier les noms de fichiers avec des nombres éventuellement non rembourrés en C++?

filenamea (1) .txt filenamea (2) .txt ... filenamea (10) .txt ... filenamea (100) .txt ... filenameb.txt .. . filenamec (1) .txt filenamec (2) .txt

et ainsi de suite ...

Répondre

5

Il existe déjà des questions similaires, je connais Sort on a string that may contain a number et How to implement a natural sort algorithm in C. Donc, vous pouvez aussi y chercher plus d'inspiration et d'aide.

Les réponses aux deux questions suggèrent http://www.davekoelle.com/alphanum.html, ce qui est essentiellement ce que Pascal Cuoq a suggéré.

Vous pouvez également consulter l'article Horreur de codage, où d'autres algorithmes sont liés: Sorting for Humans : Natural Sort Order

+0

+1 pour AlphaNum fonctionne un régal pour moi (http://www.davekoelle.com/alphanum.html) –

+0

Merci pour le pointeur. J'étais sûr qu'il avait un nom (je pense que c'est Mac OS que j'avais remarqué il y a plus de 10 ans). –

+0

Cet algorithme est encore meilleur que ce que l'OP voulait car il gère aussi les nombres dans la chaîne :) –

1

Une solution consiste à traiter les nombres (séquences consécutives de caractères) que les lettres simples du point de vue de la l'ordre lexicographique. Puis "filenamea (3) .txt", "filenamea (20) .txt" et "filenamea (100) .txt" ont tous la même longueur, et finissent par être triés dans cet ordre, ce que je comprends est ce que vous voulez (?)

Questions connexes