Ich arbeite an Strings in C und möchte fragen Was genau ist Lexicographic Order und wie wird in C verwendet. Das ist der beste Weg, um 2 Strings zu vergleichen. Ich habe über strcmp gelesen und es ist lexikographischer Vergleich, aber ich bin verwirrt.Lexikografische Reihenfolge in C
Antwort
Lexikographische Reihenfolge ist die Reihenfolge, die durch das Lexikon definiert ist, oder die Reihenfolge, die durch die Art der Kommunikation zwischen den Personen definiert wird. Wir englischsprachigen Menschen stimmen zu, dass in unserem Lexikon das Wort Apple vor dem Wort Katze steht, wir nennen es "alphabetische Reihenfolge". In Ihrem Fall wird strcmp als Reihenfolge verwendet, die durch das ASCII-Diagramm definiert wird, die auch alphabetisch ist, solange Sie einen konsistenten Fall verwenden. Ein 'A' ist kleiner als ein 'B', weil das 'A' vor dem 'B' im ASCII-Diagramm steht.
strcmp
verwendet lexikographische Reihenfolge, um Zeichenfolgen zu vergleichen. Das heißt, es folgt dem Alphabet. Im Englischen kommt F direkt vor G, und Z kommt direkt nach Y. strcmp
berücksichtigt diese Reihenfolge, weil es gerade so ist, dass die ASCII-Tabelle die Buchstaben in alphabetischer Reihenfolge sortiert. Eine typische strcmp
Funktion würde
int strcmp(const char *a, const char *b)
{
for (; *a && *b && *a == *b; ++a, ++b)
;
return *b - *a;
}
Es Schleifen durch die Zeichen, während die \0
nicht zu sehen war, und die aktuellen Zeichen sind gleich. Sobald die Zeichen ungleich werden oder \0
angezeigt wird, wird die Schleife unterbrochen und der Ausdruck return
wird ausgewertet. Wenn die \0
gesehen wurde, dann sind beide Zeichen gleich, und \0
- \0
muss 0.
Wenn Sie wissen möchten, was lexikographisch ist, suchen Sie die Definition oder lesen Sie den Tag-Text für "lexikographisch". Beim C-String-Vergleich müssen Sie genauer angeben, was Sie erreichen möchten. – Arc676
Wikipedia hat Artikel zu [lexikographischer Reihenfolge] (https://en.wikipedia.org/wiki/Lexicographic_order) (die Sie wahrscheinlich nicht wollen) und zu [alphabetischer Reihenfolge] (https://en.wikipedia.org/ wiki/Alphabetical_order) (was wahrscheinlich nützlicher ist). Mit 'strcmp()' erhalten Sie eine 'Codepunkt-Reihenfolge' für Single-Byte-Codesätze. –