Zeichenketten in C vergleichen

Jinku Hu 12 Oktober 2023
  1. Verwendung von die Funktion strcmp zum Vergleichen von Zeichenketten
  2. Verwenden Sie die Funktion strncmp, um nur bestimmte Teile von Zeichenketten zu vergleichen
  3. Verwenden Sie die Funktionen strcasecmp und strncasecmp, um Zeichenketten ohne Beachtung der Groß- und Kleinschreibung zu vergleichen
Zeichenketten in C vergleichen

Dieser Artikel stellt mehrere Methoden vor, wie man Strings in C vergleichen kann.

Verwendung von die Funktion strcmp zum Vergleichen von Zeichenketten

Die Funktion strcmp ist eine Funktion der Standardbibliothek, die im Header <string.h> definiert ist. Strings im C-Stil sind nur Zeichensequenzen, die durch das Symbol \0 abgeschlossen werden, so dass die Funktion jedes Zeichen mit Iteration vergleichen müsste.

strcmp nimmt zwei Zeichenketten und gibt eine ganze Zahl zurück, die das Ergebnis des Vergleichs darstellt. Die zurückgegebene Zahl ist negativ, wenn die erste Zeichenkette lexikografisch kleiner als die zweite Zeichenkette ist, oder positiv, wenn letztere kleiner als erstere ist, oder 0, wenn die beiden Zeichenketten identisch sind.

Beachten Sie, dass wir im folgenden Beispiel den Rückgabewert der Funktion invertieren und in die ?:-Bedingungsanweisung einfügen, um die entsprechende Ausgabe auf der Konsole auszugeben.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";
  const char* str3 = "Hello there 2";

  !strcmp(str1, str2) ? printf("strings are equal\n")
                      : printf("strings are not equal\n");

  !strcmp(str1, str3) ? printf("strings are equal\n")
                      : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Ausgabe:

strings are not equal
strings are not equal

Verwenden Sie die Funktion strncmp, um nur bestimmte Teile von Zeichenketten zu vergleichen

strncmp ist eine weitere nützliche Funktion, die im <string.h>-Header definiert ist, und sie kann verwendet werden, um nur bestimmte Zeichen vom Anfang der Strings zu vergleichen.

strncmp nimmt das dritte Argument vom Typ Integer, um die Anzahl der zu vergleichenden Zeichen in beiden Strings anzugeben. Die Rückgabewerte der Funktion sind ähnlich denen, die von strcmp zurückgegeben werden.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";

  !strncmp(str1, str2, 5) ? printf("strings are equal\n")
                          : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Ausgabe:

strings are equal

Verwenden Sie die Funktionen strcasecmp und strncasecmp, um Zeichenketten ohne Beachtung der Groß- und Kleinschreibung zu vergleichen

Die Funktion strcasecmp verhält sich ähnlich wie die Funktion strcmp mit dem Unterschied, dass sie die Groß- und Kleinschreibung von Buchstaben ignoriert. Diese Funktion ist POSIX-konform und kann auf mehreren Betriebssystemen zusammen mit strncasecmp verwendet werden, die den Vergleich ohne Berücksichtigung der Groß-/Kleinschreibung für eine bestimmte Anzahl von Zeichen in beiden Zeichenketten implementiert. Der letztgenannte Parameter kann mit dem dritten Argument vom Typ size_t an die Funktion übergeben werden.

Beachten Sie, dass die Rückgabewerte dieser Funktionen direkt in bedingten Anweisungen verwendet werden können.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  const char* str1 = "hello there 2";
  const char* str3 = "Hello there 2";

  !strcasecmp(str1, str3) ? printf("strings are equal\n")
                          : printf("strings are not equal\n");

  !strncasecmp(str1, str3, 5) ? printf("strings are equal\n")
                              : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Ausgabe:

strings are equal
strings are equal
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C String