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 <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 <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 <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 <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: oWeitere Erweiterungen