Zeichenkette in C in Kleinbuchstaben umwandeln
-
Verwenden Sie die Funktion
tolower
, um String in C in Kleinbuchstaben zu konvertieren - Verwenden der benutzerdefinierten Funktion zum Konvertieren von Strings in Kleinbuchstaben in C
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
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