Wie konvertiert man eine Zeichenkette in C++ in Kleinbuchstaben
In diesem Artikel stellen wir vor, wie Zeichenkette in C++ in Kleinbuchstaben konvertiert werden kann.
Das erste, was Sie sich fragen sollten, bevor Sie die Zeichenkettenkonvertierung in C++ durchführen, ist, welche Art von Codierung meine EingabeZeichenkette hat? Denn wenn Sie std::lower
mit Multi-Byte-Kodierungszeichen verwenden, dann würden Sie auf jeden Fall fehlerhaften Code erhalten.
Selbst wenn die folgende Funktion eine saubere Implementierung der std::string
Kleinbuchstaben-Konvertierung zu sein scheint, aber sie konvertiert nicht alle Zeichen in die Kleinbuchstaben, weil ihre Kodierung UTF-8
ist.
#include <algorithm>
#include <iostream>
std::string toLower(std::string s) {
std::transform(s.begin(), s.end(), s.begin(),
[](unsigned char c) { return std::tolower(c); });
return s;
}
int main() {
std::string string1 = u8"ÅSH to LoWer WÅN";
std::cout << "input string: " << string1 << std::endl
<< "output string: " << toLower(string1) << std::endl;
return 0;
}
Der obige Code funktioniert gut für die ASCII-Zeichenketten und einige andere Nicht-ASCII-Zeichenketten, aber sobald Sie ihm eine etwas ungewöhnliche Eingabe geben, sagen wir einige lateinische Symbole darin, wäre die Ausgabe nicht zufriedenstellend.
Die Ausgabe:
input string: ÅSH to LoWer WÅN
output string: Åsh to lower wÅn
Es ist falsch, da es das Symbol Å
auf å
hätte herabsetzen müssen. Wie können wir also dieses Problem lösen, um die korrekte Ausgabe zu erhalten?
Der beste tragbare Weg, dies zu erreichen, ist die Verwendung der ICU
(International Components for Unicode) Bibliothek, die ausgereift genug ist, um Stabilität zu bieten, allgemein zugänglich ist und Ihren Code plattformübergreifend hält.
Wir brauchen nur die folgenden Header in unsere Quelldatei aufzunehmen. Es besteht eine gute Chance, dass diese Bibliotheken bereits enthalten und auf Ihrer Plattform verfügbar sind, so dass die Code-Beispiele gut funktionieren sollten. Wenn Sie jedoch IDE-/Kompilierungszeit-Fehler erhalten, lesen Sie bitte die Anweisungen zum Herunterladen der Bibliothek in ICU-Dokumentationswebsite.
#include <unicode/locid.h>
#include <unicode/unistr.h>
#include <unicode/ustream.h>
Nun, da wir Header eingefügt haben, können wir std::string
wie folgt in Kleinbuchstaben in den Konvertierungscode schreiben:
#include <unicode/locid.h>
#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <iostream>
int main() {
std::string string1 = u8"ÅSH to LoWer WÅN";
icu::UnicodeString unicodeString(string1.c_str());
std::cout << "input string: " << string1 << std::endl
<< "output string: " << unicodeString.toLower() << std::endl;
return 0;
}
Beachten Sie, dass wir diesen Code mit den folgenden Compiler-Flags kompilieren sollten, um ICU-Bibliotheksabhängigkeiten einzubeziehen:
g++ sample_code.cpp -licuio -licuuc -o sample_code
Lassen Sie den Code laufen, und wir erhalten die korrekte Ausgabe wie erwartet:
input string: ÅSH to LoWer WÅN
output string: åsh to lower wån
Dieselbe Funktion kann eine andere Sprache verarbeiten, die wir normalerweise nicht als Benutzereingabe erwarten, und wir können auch explizit das Gebietsschema als Parameter für die Funktion toLower
angeben:
#include <iostream>
#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <unicode/locid.h>
int main() {
std::string string2 = "Κάδμῳ ἀπιϰόμενοι.. Ελληνας ϰαὶ δὴ ϰαὶ γράμματα, οὐϰ ἐόντα πρὶν Ελλησι";
icu::UnicodeString unicodeString2(string2.c_str());
std::cout << unicodeString2.toLower("el_GR") << std::endl;
return 0;
}
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 FacebookVerwandter Artikel - C++ String
- Finden Sie das erste sich wiederholende Zeichen in einer Zeichenfolge in C++
- Finden Sie die längste gemeinsame Teilzeichenfolge in C++
- Großschreiben des ersten Buchstabens einer Zeichenfolge in C++
- Vergleich von String und Character in C++
- Entfernen Sie das letzte Zeichen aus einer Zeichenkette in C++
- Abrufen des letzten Zeichens einer Zeichenkette in C++