Wie konvertiert man Zeichenkette in C++ in Großbuchstaben

Jinku Hu 11 Dezember 2023
  1. Verwenden Sie std::transform() und std::toupper(), um eine Zeichenkette in Großbuchstaben zu konvertieren
  2. Verwenden Sie icu::UnicodeString und toUpper(), um Zeichenkette in Großbuchstaben umzuwandeln
  3. Verwenden Sie icu::UnicodeString und toUpper() mit spezifischem Gebietsschema, um Zeichenkette in Großbuchstaben zu konvertieren
Wie konvertiert man Zeichenkette in C++ in Großbuchstaben

In diesem Artikel werden mehrere C++-Methoden zur Konvertierung einer Zeichenkette in Großbuchstaben erläutert.

Verwenden Sie std::transform() und std::toupper(), um eine Zeichenkette in Großbuchstaben zu konvertieren

Die std::transform Methode ist aus der STL <algorithm> Bibliothek, und sie kann die gegebene Funktion auf einen Bereich anwenden. In diesem Beispiel verwenden wir sie, um mit dem Zeichenbereich std::string zu arbeiten und jedes char mit Hilfe der toupper-Funktion in Großbuchstaben umzuwandeln. Beachten Sie, dass, obwohl diese Methode die Einzelbyte-Zeichen aus der gegebenen Zeichenkette erfolgreich transformiert, Zeichen mit Multi-Byte-Kodierung nicht groß geschrieben werden, wie in der Programmausgabe zu sehen ist.

#include <iostream>
#include <algorithm>
#include <string>

using std::cout; using std::string;
using std::endl; using std::cin;
using std::transform; using std::toupper;

string capitalizeString(string s)
{
    transform(s.begin(), s.end(), s.begin(),
                   [](unsigned char c){ return toupper(c); });
    return s;
}

int main() {
    string string1("hello there είναι απλά ένα κείμενο χωρίς");
    cout << "input  string: " << string1 << endl
         <<  "output string: " << capitalizeString(string1) << endl << endl;

    return 0;
}

Ausgabe:

input  string: hello there είναι απλά ένα κείμενο χωρίς
output string: HELLO THERE είναι απλά ένα κείμενο χωρίς

Verwenden Sie icu::UnicodeString und toUpper(), um Zeichenkette in Großbuchstaben umzuwandeln

Der obige Code funktioniert gut für die ASCII-Zeichenketten und einige andere Zeichen, aber wenn Sie z. B. bestimmte Unicode-Zeichenketten übergeben, wird die toupper-Funktion diese nicht groß schreiben. Daher besteht die portable Lösung darin, Routinen aus der ICU (International Components for Unicode) Bibliothek zu verwenden, die reif genug ist, um Stabilität zu bieten, weitläufig zugänglich ist und Ihren Code plattformübergreifend hält.

Um die ICU-Bibliothek zu nutzen, sollten Sie die folgenden Überschriften <unicode/unistr.h>, <unicode/ustream.h> und <unicode/locid.h> in Ihre Quelldatei aufnehmen. Es besteht eine gute Chance, dass diese Bibliotheken bereits installiert und auf Ihrem Betriebssystem verfügbar sind, und Code-Beispiele sollten problemlos funktionieren. Wenn Sie jedoch Fehler bei der Kompilierung erhalten, lesen Sie die Anweisungen auf der ICU Website, wie Sie Bibliotheken für bestimmte Plattformen herunterladen können.

Beachten Sie, dass Sie die folgenden Compiler-Flags bereitstellen sollten, um eine erfolgreiche Verknüpfung mit den Abhängigkeiten der ICU-Bibliothek herzustellen:

g++ sample_code.cpp -licuio -licuuc -o sample_code
#include <iostream>
#include <string>
#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <unicode/locid.h>

using std::cout; using std::string;
using std::endl; using std::cin;
using std::transform; using std::toupper;

int main() {
    string string1("hello there είναι απλά ένα κείμενο χωρίς");

    icu::UnicodeString unicodeString(string1.c_str());
    cout << "input string:  " << string1 << endl
        <<  "output string: " << unicodeString.toUpper() << endl;

    return 0;
}

Ausgabe:

input string:  hello there είναι απλά ένα κείμενο χωρίς
output string: HELLO THERE ΕΊΝΑΙ ΑΠΛΆ ΈΝΑ ΚΕΊΜΕΝΟ ΧΩΡΊΣ

Verwenden Sie icu::UnicodeString und toUpper() mit spezifischem Gebietsschema, um Zeichenkette in Großbuchstaben zu konvertieren

Die toUpper Funktion kann auch locale Parameter akzeptieren, um auf der Zeichenkette mit den Konventionen eines bestimmten locale zu arbeiten. Das zu übergebende Argument kann separat als icu::Locale-Objekt konstruiert werden, oder Sie können einfach das Gebietsschema im Zeichenkettenliteral der toUpper-Funktion angeben, wie im nächsten Code-Beispiel gezeigt wird:

#include <unicode/locid.h>
#include <unicode/unistr.h>
#include <unicode/ustream.h>

#include <iostream>

int main() {
  string string2 = "Contrairement à une opinion répandue";

  icu::UnicodeString unicodeString2(string2.c_str());
  cout << unicodeString2.toUpper("fr-FR") << endl;

  return 0;
}
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