Prüfen, ob eine Zeichenkette eine Teilzeichenkette enthält in C
-
Verwenden Sie die Funktion
strstr
, um zu prüfen, ob eine Zeichenkette eine Teilzeichenkette in C enthält -
Verwenden Sie die Funktion
strcasestr
, um zu prüfen, ob eine Zeichenkette eine Teilzeichenkette enthält -
Verwenden Sie die Funktion
strncpy
, um eine Teilzeichenkette zu kopieren
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
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