http://www.pronix.de -> Forum -> Knobelecke

Forum: Knobelecke

Moderatoren: broesel, juergen

Thema: Dateinamen "richtig" sortieren

Im Sourcecode von rpm (das sich mit sowas den lieben langen Tag rumschlagne muss) wirst du evr.c finden, wo genau das gemacht wird.
 
Wie wäre es mit einer Verkürzung auf

int strverscmp_simple(const char *s1, const char *s2)
{
	if (!(s1==s2)) {
		for(; *s1 == *s2;  s1++, s2++)
			if(!*s1) // diese if-Abfrage mit return 0 wird wegoptimiert
				return 0;
		if (isdigit(*s1) && !isdigit(*s2))
			return -1;
		if (isdigit(*s2) && !isdigit(*s1))
			return 1;
		return isdigit(*s1) ? atoi(s1) - atoi(s2) : *s1 - *s2;
	}
	return 0;
}


Tatsächlich wird bei mir
 
if(!*s1)
    return 0;

vom GCC 4.6.0 schlichtweg wegoptimiert.

--
http://saschakb.tumblr.com
Fork me on Github: https://github.com/saschakb

 

Re: Dateinamen "richtig" sortieren

Anonym am 07.11.2011 um 08:55

Hi,
dein Algorithmus funktioniert nicht. Die Ziffern MÜSSEN als Zahlen betrachtet werden und nach einer Zahl kann wieder ein Buchstabenbereich folgen. Desweiteren sollte eine solche Sortierung auch die Groß-/Kleinschreibung ignorieren und Umlaute berücksichtigst DU auch nicht korrekt.