Prüfen, ob eine Zeichenkette eine Teilzeichenkette enthält in C

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion strstr, um zu prüfen, ob eine Zeichenkette eine Teilzeichenkette in C enthält
  2. Verwenden Sie die Funktion strcasestr, um zu prüfen, ob eine Zeichenkette eine Teilzeichenkette enthält
  3. Verwenden Sie die Funktion strncpy, um eine Teilzeichenkette zu kopieren
Prüfen, ob eine Zeichenkette eine Teilzeichenkette enthält in C

Dieser Artikel erklärt mehrere Methoden, wie man in C prüfen kann, ob eine Zeichenkette eine bestimmte Teilzeichenkette enthält.

Verwenden Sie die Funktion strstr, um zu prüfen, ob eine Zeichenkette eine Teilzeichenkette in C enthält

Die Funktion strstr ist Teil der String-Funktionen der C-Standardbibliothek und ist im Header <string.h> definiert. Die Funktion nimmt zwei char-Zeigerargumente entgegen, wobei das erste die Zeichenkette bezeichnet, in der gesucht werden soll, und das andere die Zeichenkette, nach der gesucht werden soll. Sie findet die erste Anfangsadresse der angegebenen Teilzeichenkette und gibt den entsprechenden Zeiger auf char zurück. Wenn die Teilzeichenkette nicht im ersten Argument string gefunden wird, wird der NULL-Zeiger zurückgegeben.

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

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *ret;

  ret = strstr(tmp, "literal");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

Ausgabe:

found substring at address 0x55edd2ecc014

Verwenden Sie die Funktion strcasestr, um zu prüfen, ob eine Zeichenkette eine Teilzeichenkette enthält

strcasestr gehört nicht zu den Standard-Bibliotheksfunktionen, sondern ist als Erweiterung in der GNU C-Bibliothek implementiert, was mit der Makrodefinition _GNU_SOURCE angezeigt werden kann. Einmal definiert, können wir die Funktion strcasestr aufrufen, um das erste Vorkommen der angegebenen Teilzeichenkette zu finden. Beachten Sie aber, dass diese Funktion die Groß- und Kleinschreibung der beiden Zeichenketten ignoriert.

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

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *ret;

  ret = strcasestr(tmp, "LITERAL");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

Ausgabe:

found substring at address 0x55edd2ecc014

Verwenden Sie die Funktion strncpy, um eine Teilzeichenkette zu kopieren

Alternativ kann man die angegebene Teilzeichenkette mit der Funktion strncpy in einen neuen Puffer kopieren. Sie nimmt drei Argumente entgegen, von denen das erste der Ziel-Zeiger char ist, in dem die kopierte Teilzeichenkette gespeichert werden soll. Das zweite Argument ist die Quellzeichenkette, und das letzte Argument bezeichnet die erste Anzahl von Bytes, die maximal kopiert werden sollen. Beachten Sie, dass die Zielzeichenkette nicht null-terminiert ist, wenn das Null-Byte nicht in den ersten Bytes der Quellzeichenkette enthalten ist.

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

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", strncpy(str, tmp, 4));
  printf("%s\n", strncpy(str, tmp + 5, 10));

  free(str);
  exit(EXIT_SUCCESS);
}

Ausgabe:

This
string lit
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