Zeichenkette in C in Kleinbuchstaben umwandeln

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion tolower, um String in C in Kleinbuchstaben zu konvertieren
  2. Verwenden der benutzerdefinierten Funktion zum Konvertieren von Strings in Kleinbuchstaben in C
Zeichenkette in C in Kleinbuchstaben umwandeln

Dieser Artikel demonstriert mehrere Methoden, wie man in C eine Zeichenkette in Kleinbuchstaben umwandeln kann.

Verwenden Sie die Funktion tolower, um String in C in Kleinbuchstaben zu konvertieren

Die Funktion tolower ist Teil der C-Standardbibliothek, die in der Header-Datei <ctype.h> definiert ist. tolower nimmt ein Argument vom Typ int und gibt den konvertierten Wert des angegebenen Zeichens zurück, wenn die entsprechende Darstellung in Kleinbuchstaben existiert. Beachten Sie, dass das übergebene Zeichen entweder vom Typ EOF oder unsigned char darstellbar sein muss. In diesem Fall initialisieren wir den Zeiger char mit einem String-Literalwert und iterieren dann über jedes Zeichen, um es in Kleinbuchstaben zu konvertieren. Beachten Sie jedoch, dass die Übergabe von Argumenten vom Typ char an die Funktion tolower in unsigned char gecastet werden muss.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);
  for (size_t i = 0; i < strlen(str); ++i) {
    printf("%c", tolower((unsigned char)str[i]));
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

Ausgabe:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

Der vorherige Beispielcode überschreibt den Inhalt der ursprünglichen Zeichenkette mit den konvertierten, klein geschriebenen Zeichen. Alternativ können wir einen weiteren char-Zeiger mit calloc allozieren, was ähnlich wie malloc funktioniert, außer dass es den allozierten Speicher auf Null setzt und die konvertierte Zeichenkette separat speichert. Beachten Sie, dass der Zeiger freigegeben werden sollte, bevor das Programm beendet wird, oder wenn der Prozess lange läuft, sollte er freigegeben werden, sobald die String-Variable nicht mehr benötigt wird.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);

  size_t len = strlen(str);
  char *lower = calloc(len + 1, sizeof(char));

  for (size_t i = 0; i < len; ++i) {
    lower[i] = tolower((unsigned char)str[i]);
  }
  printf("%s", lower);
  free(lower);

  exit(EXIT_SUCCESS);
}

Ausgabe:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

Verwenden der benutzerdefinierten Funktion zum Konvertieren von Strings in Kleinbuchstaben in C

Eine flexiblere Lösung wäre die Implementierung einer benutzerdefinierten Funktion, die die String-Variable als Argument nimmt und die konvertierte Kleinbuchstaben-Zeichenkette an einer separaten Speicherstelle zurückgibt. Diese Methode ist im Wesentlichen die Entkopplung des vorherigen Beispiels von der main-Funktion. In diesem Fall haben wir eine Funktion toLower erstellt, die die Variable char*, in der eine null-terminierte Zeichenkette gespeichert ist, und eine Ganzzahl vom Typ size_t annimmt, die die Länge der Zeichenkette angibt. Die Funktion alloziert den Speicher auf dem Heap mit der Funktion calloc; der Aufrufer ist also dafür verantwortlich, den Speicher vor dem Beenden des Programms wieder freizugeben.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *toLower(char *str, size_t len) {
  char *str_l = calloc(len + 1, sizeof(char));

  for (size_t i = 0; i < len; ++i) {
    str_l[i] = tolower((unsigned char)str[i]);
  }
  return str_l;
}

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);
  size_t len = strlen(str);

  char *lower = toLower(str, len);
  printf("%s", lower);
  free(lower);

  exit(EXIT_SUCCESS);
}

Ausgabe:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary
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