C++-Standardbibliothek <cwchar>

<cwchar>ist eine Header-Datei in der C++-Standardbibliothek, die Funktionen für den Umgang mit Breitzeichen (wchar_t) und Breitzeichenfolgen bereitstellt. Die meisten dieser Funktionen stammen aus der C-Standardbibliothek<wchar.h>Wird verwendet, um Breitzeichen-Ein-/Ausgabe, Speicheroperationen, Zeichenfolgenoperationen und andere Funktionen im Zusammenhang mit Breitzeichen zu verarbeiten.

Syntax

cwcharDie in der Header-Datei definierten Funktionen haben normalerweise Namen, die den Standardzeichenverarbeitungsfunktionen ähneln, jedoch mitwBeginn, zum Beispielwprintf、wscanfusw. Die Parameter und Rückgabetypen dieser Funktionen unterscheiden sich ebenfalls von den entsprechenden Standardzeichenfunktionen; sie verwenden den Breitzeichentypwchar_t。

Basistypen

  • wchar_t: Ein Breitzeichen-Typ, der zum Speichern von Breitzeichen verwendet wird.
  • wint_t: Wird verwendet, um den Rückgabewert von Breitzeichen-Funktionen zu speichern.

Häufig verwendete Funktionen

1. Breitzeichen-Eingabe und -Ausgabe

  • fgetwc: Liest ein Breitzeichen aus einem Dateistream.
  • fputwc: Schreibt ein Breitzeichen in einen Dateistream.
  • fgetws: Liest eine Breitzeichenkette aus einem Dateistream.
  • fputws: Schreibt eine Breitzeichenkette in einen Dateistream.

Beispiel

#include <cwchar>
#include <iostream>

int main() {
    // Verwende fputws und fgetws für die Ein-/Ausgabe von Breitzeichenketten
    const wchar_t *filename = L"example.txt";
    FILE *file = std::fopen("example.txt", "w");
    if (file) {
        std::fputws(L"Hello, world!\n", file);
        std::fclose(file);
    }

    file = std::fopen("example.txt", "r");
    if (file) {
        wchar_t buffer[256];
        if (std::fgetws(buffer, 256, file)) {
            std::wcout << L"Read from file: " << buffer;
        }
        std::fclose(file);
    }

    return 0;
}

Das Ausgabeergebnis ist:

Read from file: Hello, 世界!

2. Operationen mit breiten Zeichen und breiten Zeichenketten

  • wcscpy: Kopiert eine breite Zeichenkette.
  • wcslen: Ermittelt die Länge einer breiten Zeichenkette.
  • wcscmp: Vergleicht breite Zeichenketten.
  • wcsncpy: Kopiert eine breite Zeichenkette mit angegebener Länge.

Beispiel

#include <cwchar>
#include <iostream>

int main() {
    wchar_t str1[100] = L"Hello";
    wchar_t str2[100] = L"Welt";
   
    // Kopieren einer breiten Zeichenkette
    std::wcscpy(str1, L"Hallo, Welt!");
    std::wcout << L"Kopierte Zeichenkette: " << str1 << std::endl;

    // Länge einer breiten Zeichenkette
    size_t len = std::wcslen(str1);
    std::wcout << L"Länge der Zeichenkette: " << len << std::endl;

    // Vergleich breiter Zeichenketten
    int result = std::wcscmp(str1, str2);
    std::wcout << L"Vergleichsergebnis: " << result << std::endl;

    // Teilweises Kopieren einer breiten Zeichenkette
    std::wcsncpy(str2, str1, 5);
    str2[5] = L'\0';  // Stellen Sie sicher, dass es mit einem Nullzeichen endet
    std::wcout << L"Teilweise kopierte Zeichenkette: " << str2 << std::endl;

    return 0;
}

Das Ausgabeergebnis ist:

Copied string: Hello, 

3. Klassifizierung und Konvertierung von Breitzeichen

  • iswalpha: Bestimmt, ob ein Breitzeichen ein Buchstabe ist.
  • iswdigit: Bestimmt, ob ein Breitzeichen eine Ziffer ist.
  • towlower: Konvertiert ein Breitzeichen in Kleinbuchstaben.
  • towupper: Konvertiert ein Breitzeichen in Großbuchstaben.

Beispiel

#include <cwchar>
#include <iostream>

int main() {
    wchar_t ch = L'A';

    // Prüfen, ob das Breitzeichen ein Buchstabe ist
    if (std::iswalpha(ch)) {
        std::wcout << ch << L" ist ein alphabetisches Zeichen." << std::endl;
    }

    // Prüfen, ob das Breitzeichen eine Ziffer ist
    ch = L'9';
    if (std::iswdigit(ch)) {
        std::wcout << ch << L" ist eine Ziffer." << std::endl;
    }

    // Breitzeichen in Kleinbuchstaben umwandeln
    ch = L'G';
    wchar_t lower_ch = std::towlower(ch);
    std::wcout << L"Kleinbuchstabe von " << ch << L" ist " << lower_ch << std::endl;

    // Breitzeichen in Großbuchstaben umwandeln
    ch = L'a';
    wchar_t upper_ch = std::towupper(ch);
    std::wcout << L"Großbuchstabe von " << ch << L" ist " << upper_ch << std::endl;

    return 0;
}

Das Ausgabeergebnis ist:

A is an alphabetic character.
9 is a digit.
Lowercase of G is g
Uppercase of a is A

4. Ein-/Ausgabe von Breitzeichen und Breitzeichenketten

  • wprintf: Formatierte Ausgabe von Breitzeichen.
  • wscanf: Formatierte Eingabe von Breitzeichen.
  • swprintf: schreibt formatierte Breitzeichen in eine Breitzeichenkette.
  • swscanf: liest formatierte Breitzeichen aus einer Breitzeichenkette.

Beispiel

#include <cwchar>
#include <iostream>

int main() {
    wchar_t buffer[100];

    // Formatierte Ausgabe von Breitzeichen
    std::wprintf(L"Formatierte Ausgabe: %d %s\n", 42, L"Hello");

    // Formatierte Eingabe von Breitzeichen
    std::wprintf(L"Geben Sie eine Zahl und eine Zeichenkette ein: ");
    std::wscanf(L"%d %ls", &buffer);
    std::wprintf(L"Sie haben eingegeben: %ls\n", buffer);

    // Formatierte Breitzeichen in eine Breitzeichenkette schreiben
    std::swprintf(buffer, 100, L"Formatiert %d %s", 42, L"Ausgabe");
    std::wcout << L"Puffer: " << buffer << std::endl;

    // Formatierte Breitzeichen aus einer Breitzeichenkette lesen
    int number;
    wchar_t word[100];
    std::swscanf(buffer, L"Formatiert %d %s", &number, word);
    std::wcout << L"Geparste Zahl: " << number << L", Wort: " << word << std::endl;

    return 0;
}

Das Ausgabeergebnis ist:

Formatted output: 42 H
Enter a number and a string: example
You entered: 
Buffer: Formatted 42 o
Parsed number: 42, word: o
Weitere Erweiterungen