2 Stimmen

Welcher Vergleichsalgorithmus wird bei der "strcmp"-Programmierung in C verwendet?

Kann jemand erklären, welcher Algorithmus in strcmp zwei Zeichenfolgen in der C-Programmierung zu vergleichen?

Ich habe nicht verstanden, den Rückgabewert von diesem, Es verwendet einen Algorithmus wie ' Levenstien-Algorithmus ', um den Abstand zwischen zwei Zeichenfolgen zu ermitteln...

7voto

David Grayson Punkte 77766

Die GNU-Implementierung der Standard-C-Bibliothek, glibc, ist quelloffen und Sie können einfach lesen strcmp.c wenn Sie neugierig sind. Es ist nicht viel dabei. Hier ist es:

/* Compare S1 and S2, returning less than, equal to or
   greater than zero if S1 is lexicographically less than,
   equal to or greater than S2.  */
int strcmp (const char *p1, const char *p2)
{
  register const unsigned char *s1 = (const unsigned char *) p1;
  register const unsigned char *s2 = (const unsigned char *) p2;
  unsigned reg_char c1, c2;

  do
    {
      c1 = (unsigned char) *s1++;
      c2 = (unsigned char) *s2++;
      if (c1 == '\0')
        return c1 - c2;
    }
  while (c1 == c2);

  return c1 - c2;
}

4voto

Mahmoud Al-Qudsi Punkte 26972

strcmp ist kein String-Distanz-Algorithmus. Es ist ein String Vergleich Algorithmus, und das Einzige, was er Ihnen sagen muss, ist, ob die beiden Zeichenketten gleich sind (Rückgabewert Null) oder, falls nicht, welche der beiden Zeichenketten für eine bestimmte Bedeutung dieses Wortes "größer" ist (ein positiver oder negativer Wert).

Die Größe des Rückgabeergebnisses ist nicht spezifiziert, d.h. es kann immer entweder 1, 0 oder -1 zurückgeben; oder es kann einen tatsächlichen integralen Abstand für ein Abstandsmaß zurückgeben (z.B. Levenstein, einfache Subtraktion, etc.). In der Praxis, strcmp wird aus Leistungsgründen nie mit einem tatsächlichen String-Distanz-Algorithmus implementiert (der geringste Arbeitsaufwand zur Bestimmung der Äquivalenz zweier Strings und dann raus).

3voto

amit Punkte 172586

Diese Dokumentationen für strcmp() sind ziemlich eindeutig

Ein Nullwert bedeutet, dass beide Zeichenketten gleich sind. Ein Wert größer als Null bedeutet, dass das erste Zeichen, das nicht übereinstimmt, einen einen größeren Wert in str1 als in str2 hat; und ein Wert kleiner als Null zeigt das Gegenteil an.

mit anderen Worten, sie prüft auf lexikographische Ordnung , oder noch genauer alphabetische Reihenfolge zwischen den beiden Strings.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X