Biblioteca estándar de C++ <cwchar>
<cwchar>es un archivo de cabecera en la biblioteca estándar de C++ que proporciona funciones para manejar caracteres anchos (wchar_t) y cadenas de caracteres anchos. La mayoría de estas funciones provienen de la biblioteca estándar de C<wchar.h>, utilizadas para manejar la entrada/salida de caracteres anchos, operaciones de memoria, operaciones de cadenas y otras funciones relacionadas con caracteres anchos.
Sintaxis
cwcharLas funciones definidas en el archivo de cabecera generalmente tienen nombres similares a las funciones estándar de manejo de caracteres, pero comienzan conw, por ejemplowprintf、wscanfetc. Los parámetros y tipos de retorno de estas funciones también difieren de las funciones estándar de caracteres correspondientes; utilizan el tipo de carácter anchowchar_t。
Tipos básicos
wchar_t: se utiliza para almacenar el valor de retorno de las funciones de caracteres anchos.wint_tFunciones comunes
Funciones comunes
1. : Lee un carácter ancho de un flujo de archivo.
fgetwc: Escribe un carácter ancho en un flujo de archivo.fputwc: Lee una cadena de caracteres anchos de un flujo de archivo.fgetws: Escribe una cadena de caracteres anchos en un flujo de archivo.fputwsEjemplo
Ejemplo
#include <iostream>
int main() {
¡Hola, mundo!
const wchar_t *filename = L"example.txt";
FILE *file = std::fopen("example.txt", "w");
if (file) {
std::fputws(LEl resultado de salida es:\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;
}
Operaciones con caracteres anchos y cadenas de caracteres anchos
Read from file: Hello, 世界!
2. : Copia una cadena de caracteres anchos.
wcscpy: Obtiene la longitud de una cadena de caracteres anchos.wcslen: Compara cadenas de caracteres anchos.wcscmp: Copia una cadena de caracteres anchos con una longitud especificada.wcsncpyEjemplo
Ejemplo
#include <iostream>
int main() {
wchar_t str1[100] = L"Hello";
wchar_t str2[100] = L"World";
¡Hola, mundo!
std::wcscpy(str1, L// Longitud de cadena de caracteres anchos);
std::wcout << L"Copied string: " << str1 << std::endl;
// Comparación de cadenas de caracteres anchos
size_t len = std::wcslen(str1);
std::wcout << L"Length of string: " << len << std::endl;
// Copia parcial de cadenas de caracteres anchos
int result = std::wcscmp(str1, str2);
std::wcout << L"Comparison result: " << result << std::endl;
// Asegurar que termine con un carácter nulo
std::wcsncpy(str2, str1, 5);
str2[5] = L'\0'; El resultado de salida es:
std::wcout << L"Partially copied string: " << str2 << std::endl;
return 0;
}
Clasificación y conversión de caracteres anchos
Copied string: Hello,
3. : Determina si un carácter ancho es una letra.
iswalpha: Determina si un carácter ancho es un dígito.iswdigit: Convierte un carácter ancho a minúscula.towlower: Convierte un carácter ancho a mayúscula.towupperEjemplo
Ejemplo
#include <iostream>
int main() {
wchar_t ch = L'A';
// Determinar si un carácter ancho es un dígito
if (std::iswalpha(ch)) {
std::wcout << ch << L" is an alphabetic character." << std::endl;
}
// Convertir un carácter ancho a minúscula
ch = L'9';
if (std::iswdigit(ch)) {
std::wcout << ch << L" is a digit." << std::endl;
}
// Convertir un carácter ancho a mayúscula
ch = L'G';
wchar_t lower_ch = std::towlower(ch);
std::wcout << L"Lowercase of " << ch << L" is " << lower_ch << std::endl;
El resultado de salida es:
ch = L'a';
wchar_t upper_ch = std::towupper(ch);
std::wcout << L"Uppercase of " << ch << L" is " << upper_ch << std::endl;
return 0;
}
Entrada/salida de caracteres anchos y cadenas de caracteres anchos
A is an alphabetic character. 9 is a digit. Lowercase of G is g Uppercase of a is A
4. : Salida formateada de caracteres anchos.
wprintf: Entrada formateada de caracteres anchos.wscanf: Escribe caracteres anchos formateados en una cadena de caracteres anchos.swprintf: Lee caracteres anchos formateados de una cadena de caracteres anchos.swscanfEjemplo
Ejemplo
#include <iostream>
int main() {
wchar_t buffer[100];
// Entrada formateada de caracteres anchos
std::wprintf(L"Formatted output: %d %s\n", 42, L"Hello");
// Escribir caracteres anchos formateados en una cadena de caracteres anchos
std::wprintf(L"Enter a number and a string: ");
std::wscanf(L"%d %ls", &buffer);
std::wprintf(L"You entered: %ls\n", buffer);
// Leer caracteres anchos formateados de una cadena de caracteres anchos
std::swprintf(buffer, 100, L"Formatted %d %s", 42, L"output");
std::wcout << L"Buffer: " << buffer << std::endl;
El resultado de salida es:
int number;
wchar_t word[100];
std::swscanf(buffer, L"Formatted %d %s", &number, word);
std::wcout << L"Parsed number: " << number << L", word: " << word << std::endl;
return 0;
}
Otras extensiones
Formatted output: 42 H Enter a number and a string: ejemplo You entered: Buffer: Formatted 42 o Parsed number: 42, word: oIA pensando...