Zeichenkette in C abschneiden

Jinku Hu 12 Oktober 2023
Zeichenkette in C abschneiden

In diesem Artikel werden verschiedene Methoden zum Abschneiden von Zeichenketten in C vorgestellt.

Verwenden Sie die benutzerdefinierte Funktion mit Zeigerarithmetik, um Zeichenketten abzuschneiden

Da die Zeichenketten in C nur die mit Nullbyte - \0 abgeschlossenen Zeichenarrays sind, können wir eine benutzerdefinierte Funktion implementieren, die den aktuellen Zeiger um die angegebene Anzahl von Stellen an den Anfang der Zeichenkette verschiebt und einen neuen Zeigerwert zurückgibt.

Beachten Sie jedoch, dass es zwei Probleme gibt. Das erste ist, dass wir die Option haben müssen, die angegebene Zeichenkette von links oder rechts abzuschneiden, und das zweite ist, dass das Verschieben des Zeigers von der rechten Seite der Zeichenkette nicht ausreicht, da das Null-Byte eingefügt werden muss, um das Ende zu kennzeichnen. Daher definieren wir die Funktion truncString, bei der die Zeichenkette und mehrere Zeichen von der Zeichenkette abgeschnitten werden. Die Zahl kann negativ sein und gibt die Seite an, von der die angegebene Anzahl von Zeichen entfernt werden soll. Als Nächstes rufen wir die Zeichenkettenlänge mit der Funktion strlen ab, was bedeutet, dass der Benutzer für die Übergabe der gültigen Zeichenkette verantwortlich ist. Dann vergleichen wir die Länge mit der Anzahl der Zeichen, die abgeschnitten werden sollen, und fahren dann mit der Zeigermanipulation fort.

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

char *truncString(char *str, int pos) {
  size_t len = strlen(str);

  if (len > abs(pos)) {
    if (pos > 0)
      str = str + pos;
    else
      str[len + pos] = 0;
  }

  return str;
}

int main(void) {
  char *str1 = "the string to be truncated";

  printf("%s\n", str1);
  printf("%s \n", truncString(strdupa(str1), 4));
  printf("%s \n", truncString(strdupa(str1), -4));

  exit(EXIT_SUCCESS);
}

Ausgabe:

the string to be truncated
string to be truncated
the string to be trunc

Wir weisen der Zeichenposition nur den Wert 0 zu, der durch Subtrahieren der Länge der Zeichenkette und der übergebenen Zahl berechnet wird. Daher haben wir das Ende der Zeichenkette verschoben, und das Drucken des Werts kann mit dem alten Zeiger erfolgen.

Alternativ können wir die ähnliche Funktion truncString2 mit demselben Prototyp implementieren, aber die Zeichenkette auf die Anzahl der als zweites Argument übergebenen Zeichen abschneiden. Das Vorzeichen der Zahl gibt die Seite an, von der aus die neue Zeichenkette gebildet werden soll, nämlich die positive Ganzzahl bezeichnet die linke Seite und die negative - das Gegenteil.

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

char *truncString2(char *str, int pos) {
  size_t len = strlen(str);

  if (len > abs(pos)) {
    if (pos > 0)
      str[pos] = 0;
    else
      str = &str[len] + pos;
  } else {
    return (char *)NULL;
  }

  return str;
}

int main(void) {
  char *str2 = "temporary string variable";

  printf("%s\n", str2);
  printf("%s \n", truncString2(strdupa(str2), 6));
  printf("%s \n", truncString2(strdupa(str2), -6));

  exit(EXIT_SUCCESS);
}

Ausgabe:

the string to be truncated
string to be truncated
the string to be trunc
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