String str[]={"-123","89","-10","456"};
str
ist ein Array von Zeichenfolgen, wobei jede Zeichenfolge das Format einer Ganzzahl hat, und Sie müssen dieses ArrayO(n log n)
rechtzeitig sortieren .Die Zeichenfolgen in
str
können sowohl positive als auch negative Ganzzahlen darstellen. Die maximale Länge dieser Zeichenfolgen beträgt 1024 Zeichen.
Ich weiß, dass eine Lösung dieses Problems darin besteht, die Zeichenfolgen in Zahlen umzuwandeln und sie dann zu vergleichen. Gibt es eine andere Lösung für dieses Problem?
Antworten:
Eine andere Lösung besteht darin, eine eigene Vergleichsfunktion zu implementieren:
-
, ist die Zeichenfolge, die mit beginnt,-
die kleinere Zahl.-
, vergleichen Sie die Länge der Zeichenfolgen. Die längere Zeichenfolge ist die kleinere Zahl. Wenn beide Zeichenfolgen dieselbe Länge haben, führen Sie einen Standard-Zeichenfolgenvergleich durch, negieren Sie jedoch das Ergebnis.quelle
"-0"
), falls vorhanden, würden vor den normalen sortiert, aber das scheint mir in Ordnung zu sein ...find_first_not_of("0")
und übergeben Sie diese an diecompare()
Überladung, die für beide Vergleichsseiten nach pos / len fragt.Hier ist ein minimales und möglicherweise unzureichendes Beispiel (behandelt keine führenden Nullen, Leerzeichen usw.), das das tut, was Sie möchten.
Die Kommentare erklären, was es tut. :) :)
quelle
!=
anstatt^
dasselbe Ergebnis für Boolesche Werte zu haben, aber das Ergebnis ist bereits boolesch, wodurch die explizite Umwandlung (und zusätzlich die Klammern ...) veraltet sind.less_as_number
?).