Trimmen einer Zeichenkette in C
- Benutzerdefinierte Funktion zum Trimmen einer Zeichenkette in C verwenden
- Eine weitere benutzerdefinierte Funktion zum Trimmen einer Zeichenkette in C verwenden
Dieser Artikel erklärt verschiedene Methoden, wie Sie eine Zeichenkette in C trimmen können.
Benutzerdefinierte Funktion zum Trimmen einer Zeichenkette in C verwenden
Funktionen zum Trimmen von Strings sind nicht Teil der Standard-String-Utilities der C-Bibliothek oder werden von den POSIX-kompatiblen Funktionen bereitgestellt, sodass man die Funktionalität selbst implementieren muss. In diesem Beispiel implementieren wir die Funktion namens trimString
, die ein einzelnes Zeigerargument char
entgegennimmt und den Zeiger auf die getrimmte Zeichenkette zurückgibt. Beachten Sie, dass wir als Aufrufer für die Übergabe der zu verändernden Zeichenkette verantwortlich sind. In diesem Fall haben wir strdup
verwendet, um str1
zu duplizieren, und wenn die Zeichenkette verwendet wird, sollte sie mit dem Aufruf free
freigegeben werden.
Die Funktion trimString
ist so implementiert, dass sie die Zeichenkette Zeichen für Zeichen durchläuft, und solange das angegebene ein Leerzeichen ist, erhöht sie den Zeiger um eins. Kurz gesagt, diese while
-Schleife verschiebt den char
-Zeiger auf das erste Nicht-Leerzeichen und trimmt so das Präfix der Zeichenkette. Als nächstes wird der inkrementierte Zeiger überprüft, ob der Wert gleich null ist, was bedeutet, dass die gegebene Zeichenkette keine Nicht-Leerzeichen hatte; daher geben wir null zurück, um den Fehlerfall zu kennzeichnen. Die anschließende while
-Schleife entfernt die Leerzeichen am Ende der Zeichenkette, indem sie den Zeiger auf das Ende der Zeichenkette nach und nach nach hinten verschiebt. Sobald die Schleife auf ein Nicht-Leerzeichen stößt, hält sie an, und die nächste Anweisung setzt das Zeichen \0
an das Ende der Zeichenkette.
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *trimString(char *str) {
char *end;
while (isspace((unsigned char)*str)) str++;
if (*str == 0) return str;
end = str + strlen(str) - 1;
while (end > str && isspace((unsigned char)*end)) end--;
end[1] = '\0';
return str;
}
int main(void) {
const char *str1 = " temporary string ";
printf("%s\n", str1);
char *tmp = strdup(str1);
printf("%s\n", trimString(tmp));
free(tmp);
exit(EXIT_SUCCESS);
}
Ausgabe:
temporary string
temporary string
Eine weitere benutzerdefinierte Funktion zum Trimmen einer Zeichenkette in C verwenden
Ähnlich wie die vorherige Trimmfunktion wird trimString2
implementiert, um Leerzeichen von beiden Seiten der Zeichenkette zu entfernen. Die erste while
-Schleife berechnet die Anzahl der Leerzeichen am Ende der Zeichenkette, und die zweite Schleife verschiebt den Zeiger auf das erste Zeichen ohne Leerzeichen. Am Ende der Schleifenanweisungen enthält len
die Anzahl der Zeichen in der getrimmten Zeichenkette, die von der Funktion strndup
erzeugt wurde. Beachten Sie, dass der Zeiger, der von der Funktion strndup
zurückgegeben wird, vom Aufrufer freigegeben werden sollte, um Speicherlecks zu vermeiden.
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *trimString2(char *str) {
size_t len = strlen(str);
while (isspace(str[len - 1])) --len;
while (*str && isspace(*str)) ++str, --len;
return strndup(str, len);
}
int main(void) {
char *str2 = " temporary string ";
printf("%s\n", str2);
char *s = trimString2(str2);
printf("%s\n", s);
free(s);
exit(EXIT_SUCCESS);
}
Ausgabe:
temporary string
temporary string
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