Advanced Java Services | Stringfunctions in string.h |
Stringlänge | |
size_t strlen ( const char* str ) | Get string length |
Kopieren | |
char* strcpy ( char* dest, const char* source ) | Kopiert source nach dest (keine Prüfungen) |
char* strncpy ( char* dest, const char* source, size_t num ) | Kopiert die ersten num Zeichen von source nach dest (keine Prüfungen) |
Stringverkettung | |
char* strcat ( char* dest, const char* source ) | Appends a copy of the source string to the dest string, plus a terminating null |
char* strncat ( char* dest, const char* source, size_t num ) | Appends the first num characters of source to dest, plus a terminating null |
Stringvergleich | |
int strcmp ( const char* str1, const char* str2 ) | Compare two strings |
int strncmp ( const char* str1, const char* str2, size_t num ) | Compares up to num characters of the C string str1 to those of the C string str2. |
Suchen in Strings | |
char* strchr ( const char* str, int ch ) | Locate first occurrence of character ch in string str |
char* strrchr ( const char* str, int ch ) | Locate last occurrence of character ch in string str |
char* strstr ( const char* str1, const char* str2 ) | Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. |
size_t strspn ( const char* str1, const char* str2 ) | Returns the length of the initial portion of str1 which consists only of characters that are part of str2. The search does not include the terminating null-characters of either strings, but ends there. |
size_t strcspn ( const char* str1, const char* str2 ) | Scans str1 for the first occurrence of any of the characters that are part of str2, returning the number of characters of str1 read before this first occurrence. |
char * strpbrk ( const char* str1, const char str2 ) | Returns a pointer to the first occurrence in str1 of any of the characters that are part of str2, or a null pointer if there are no matches. |
Weitere | char * strtok ( char * str, const char * delimiters ) | Split string into tokens |
char * strerror ( int errnum ) | Get pointer to error message string |
Es folgen einige Beispiele mit den nicht offensichtlich arbeitenden Funktionen.
Die Funktion sucht ob der erste übergebenene String mit Zeichen aus dem zweiten übergebenen String beginnt. Es wird die Anzahl der gefundenen Zeichen zurückgegeben. Das folgende Beispiel verdeutlicht die Funktionsweise.
void strspndemo() { puts("strspndemo"); char* str = "oieaxxxxiouAEIOU"; char* vowels = "aeiouAEIOU"; int i = strspn(str, vowels); printf("Die Zeichenkette '%s' beginnt mit %d Vokalen.\n", str, i); str = "wrzlbrmpft"; vowels = "aeiouAEIOU"; i = strspn(str, vowels); if (i == 0) printf("Die Zeichenkette '%s' beginnt nicht mit Vokalen.\n", str); }
Die Ausgabe:
strspndemo Die Zeichenkette 'oieaxxxaeiouAEIOUxx' beginnt mit 4 Vokalen. Die Zeichenkette 'wrzlbrmpft' beginnt nicht mit Vokalen.
Die Funktion untersucht ob der erste übergebenene String Zeichen aus dem zweiten übergebenen String enthält. Es wird die Anzahl der Zeichen gezählt die vor der ersten Fundstelle auftreten.
void strcspndemo() { puts("strcspndemo"); char* str = "xxxxxeaxxiouAEIOU"; char* vowels = "aeiouAEIOU"; int i = strcspn(str, vowels); printf("In der Zeichenkette '%s' stehen vor den ersten Vokalen %d Nichtvokale.\n", str, i); str = "wrzlbrmpft"; vowels = "aeiouAEIOU"; i = strcspn(str, vowels); if (i == strlen(str)) printf("Die Zeichenkette '%s' enthält keine Vokale.\n", str); }
Die Ausgabe:
strcspndemo In der Zeichenkette 'xxxxxeaxxiouAEIOU' stehen vor den ersten Vokalen 5 Nichtvokale. Die Zeichenkette 'wrzlbrmpft' enthält keine Vokale.
Diese Funktion durchsucht einen String nach Zeichen, die in einem zweiten String stehen. Die Funktion gibt einen Zeiger auf das erste gefundene Zeichen zurück. Die Funktion wird dann solange aufgerufen, bis keine Zeichen mehr gefunden werden. In diesem Fall wird NULL zurückgegeben.
#include <string.h> #include <stdio.h> int main(void) { puts("strpbrk"); char* str = "Ein Satz in dem alle Umlaute vorkommen"; char* vowels = "aeiouAEIOU"; char * pch; printf("strpbrk findet alle Umlaute im folgenden Satz\n'%s':\n", str); pch = strpbrk(str, vowels); while (pch != NULL) { printf("%c ", *pch); pch = strpbrk(pch + 1, vowels); } printf("\n"); return EXIT_SUCCESS; }
Es ergibt sich die folgende Ausgabe:
strpbrk strpbrk findet alle Umlaute im folgenden Satz 'Ein Satz in dem alle Umlaute vorkommen': E i a i e a e U a u e o o e
Mit der Funktion strtok kann man einen als ersten Parameter übergebenen String zerlegen. Trennzeichen sind die im zweiten Parameter übergebenen Zeichen. Das tückische an der Funktion ist, daß sie den übergebenen String manipuliert, was man nicht erwartet, wenn man die Funktion nicht kennt. Das folgende Programm zeigt die Funktionsweise von strtok absichtlich ohne Schleife.
void strokdemo1() { puts("strtokdemo1"); char source[] = "trennen von worten"; char* token = NULL; printf("source = %s\n\n", source); // erster aufruf token = strtok(source, " "); printf("source = %s\n", source); printf("token = %s\n\n", token); // folgende aufrufe token = strtok(NULL, " "); printf("source = %s\n", source); printf("token = %s\n\n", token); token = strtok(NULL, " "); printf("source = %s\n", source); printf("token = %s\n\n", token); token = strtok(NULL, " "); printf("source = %s\n", source); printf("token = %s\n", token); }
Die Ausgabe.
strtokdemo1 source = trennen von worten source = trennen token = trennen source = trennen token = von source = trennen token = worten source = trennen token = (null)