lexicographic

___ answer3049216 ___

Was Sie tun müssen, ist eine Bestellungstabelle für jedes Zeichen zu erstellen. Dies ist auch der einfachste Weg, Vergleiche ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen.

%Vor%

Beachten Sie, dass Zeichen möglicherweise signiert sind. In diesem Fall wird der Index für Ihre Tabelle möglicherweise negativ. Dieser Code ist nur für signierte Zeichen verfügbar:

%Vor%     
___ qstnhdr ___ strcmp () aber mit 0-9 NACH A-Z? (C / C ++) ___ answer3049443 ___

Wenn Ihre Kräfte wie alle anderen Kräfte sind, die ich kenne, möchten Sie vielleicht eine Option machen (auch wenn sie versteckt ist):

  

Sortierreihenfolge:

     

o Zahlen nach Buchstaben

     

o Buchstaben nach Zahlen

oder noch schlimmer, sie könnten herausfinden, dass Zahlen numerisch sortiert werden sollen (z. B. "A123" kommt nach "A15"), dann kann es

sein
  

o Zahlen nach Buchstaben

     

o Buchstaben nach Zahlen

     

o Smart Numbers nach Buchstaben

     

o Buchstaben nach intelligenten Zahlen

Das geht dahin, das eigentliche Problem zu diagnostizieren, nicht das Symptom. Ich wette, es besteht eine geringe Chance, dass sie ihre Meinung in der 11. Stunde und 59. Minute ändern können.

    
___ qstntxt ___

Aus Gründen, denen ich völlig widerspreche, aber "Die Mächte (der Anti-Usability), die sein" weiterhin trotz meiner Einwände verordnen, habe ich eine Sortierroutine, die basic strcmp () vergleicht, um nach ihrem Namen zu sortieren. Es funktioniert großartig; es ist schwer, das falsch zu verstehen. In der 11. Stunde wurde jedoch entschieden, dass Einträge, die mit einer Nummer beginnen, nach EINTRÄGEN kommen sollten, die entgegen der ASCII-Reihenfolge mit einem Buchstaben beginnen. Sie zitieren den EBCDIC-Standard hat Zahlen, die Buchstaben folgen, so ist die vorherige Annahme keine universelle Wahrheit, und ich habe keine Macht, dieses Argument zu gewinnen ... aber ich schweife ab.

Darin liegt mein Problem. Ich habe alle geeigneten Verweise auf strcmp durch einen neuen Funktionsaufruf nonstd_strcmp ersetzt und muss nun die Änderungen implementieren, um die Änderung der Sortierung durchzuführen. Ich habe eine FreeBSD-Quelle als Basis verwendet: Ссылка

%Vor%

Ich schätze, ich brauche vielleicht etwas Zeit, um wirklich darüber nachzudenken, wie es gemacht werden sollte, aber ich bin mir sicher, dass ich nicht der Einzige bin, der die hirngängige Veränderung von Spezifikationen vor der Veröffentlichung erlebt hat.

    
___ answer3049142 ___

Sie könnten eine Nachschlagetabelle verwenden, um ASCII in EBCDIC zu übersetzen, wenn Sie Zeichen vergleichen; -)

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ answer3049464 ___

Hier ist, was eine sehr gute Implementierung des String-Vergleiches sein sollte, ähnlich wie in anderen Posts beschrieben.

%Vor%

Darüber hinaus könnten Sie die Funktion verallgemeinern, die char_remap_table als Parameter zu verwenden, mit der Sie bei Bedarf später leicht andere Zuordnungen verwenden können.

%Vor%     
___ answer3049545 ___

Obwohl ich generell mit den obigen Antworten einverstanden bin, denke ich, dass es albern ist, Nachschlagevorgänge für jede Iteration der Schleife durchzuführen, es sei denn, Sie denken, dass die meisten Vergleiche unterschiedliche erste Zeichen haben, wenn Sie stattdessen

machen könnten %Vor%

Ich würde auch empfehlen, die order_table mit einem statischen Initialisierer zu konstruieren, was die Geschwindigkeit verbessert (keine Notwendigkeit, jedes Mal zu generieren - oder jemals) und vielleicht auch Lesbarkeit

    
___ tag123strcmp ___ strcmp ist eine String-Vergleichsfunktion, die in Sprachen wie C, C ++, PHP, Python und MATLAB verfügbar ist. ___ tag123lexikographische ___ lexikographische oder lexikographische Ordnung ist eine Verallgemeinerung der Art und Weise, wie die alphabetische Reihenfolge der Wörter auf der alphabetischen Reihenfolge ihrer Teilbuchstaben basiert. ___ answer3050142 ___

In diesem speziellen Fall mit nur Großbuchstaben (wie vom OP in Kommentaren erwähnt) und Ziffern 0-9, könnten Sie auch die Auftragstabelle weglassen und stattdessen beide abweichenden Zeichen mit 4 multiplizieren und vergleichen Die Ergebnisse modulo 256. Der Bereich der ASCII-Ziffern (48 bis 57) wird 8 Bits nicht überschreiten (57 × 4 = 228), aber der Bereich der Großbuchstaben (65 bis 90) wird (65 × 4 = 260). Wenn wir die multiplizierten Werte modulo 256 vergleichen, ist der Wert für jeden Buchstaben kleiner als der einer beliebigen Ziffer: 90 × 4% 256 = 104 & lt; 192 = 48 × 4

Der Code sieht möglicherweise so aus:

%Vor%

Natürlich ist die Auftragstabellen-Lösung im Allgemeinen weitaus vielseitiger, da sie es ermöglicht, eine Sortierreihenfolge für jedes Zeichen zu definieren - diese Lösung ist nur für diesen speziellen Fall sinnvoll, wenn Großbuchstaben Buchstaben gegenüber Ziffern sind . (Aber z. B. auf Microcontroller-Plattformen kann das Speichern sogar der kleinen Menge an Speicher, die von der Tabelle verwendet wird, ein echter Vorteil sein.)

    
___
2
Antworten

lexikographisch kleinste Zeichenkette nach der Rotation

Ich versuche, dieses Problem in spoj zu lösen Ich muss die Anzahl der Umdrehungen einer gegebenen Saite finden, die sie lexikographisch am kleinsten unter allen Rotationen macht. Zum Beispiel: Original: ama Erste Rotation: maa...
21.02.2013, 12:59
4
Antworten

Am effizientesten lexikographischer Index

Kann jemand potenziell effizientere Algorithmen finden, um die folgende Aufgabe zu erfüllen?: Geben Sie für jede gegebene Permutation der ganzen Zahlen 0 bis 7 den Index zurück, der die Permutation lexikographisch beschreibt (indexiert von 0,...
31.05.2014, 01:08
2
Antworten

Finde die lexikographische Reihenfolge einer Ganzzahl-Partition

Für Permutationen mit N und k habe ich eine Funktion, die die k th Permutation von N in lexikographischer Reihenfolge findet. Auch bei einer Permutation perm habe ich eine Funktion, die den lexikographischen Index der Permutation...
22.01.2014, 21:01
6
Antworten

strcmp () aber mit 0-9 NACH A-Z? (C / C ++)

Aus Gründen, denen ich völlig widerspreche, aber "Die Mächte (der Anti-Usability), die sein" weiterhin trotz meiner Einwände verordnen, habe ich eine Sortierroutine, die basic strcmp () vergleicht, um nach ihrem Namen zu sortieren. Es funktionie...
15.06.2010, 21:18