Trimmen einer Zeichenkette in C

Jinku Hu 12 Oktober 2023
  1. Benutzerdefinierte Funktion zum Trimmen einer Zeichenkette in C verwenden
  2. Eine weitere benutzerdefinierte Funktion zum Trimmen einer Zeichenkette in C verwenden
Trimmen einer Zeichenkette in C

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
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