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 <cwchar>
#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 <cwchar>
#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 <cwchar>
#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 <cwchar>
#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: o
IA pensando...