Funciones de recopilación en C

Funciones de recopilación en C
La recopilación es un proceso muy importante de disposición de caracteres y permite que tanto el sistema como el usuario comprendan o muestren correctamente los textos, páginas web y programas, independientemente del alfabeto utilizado o la región en la que fueron escritos y sus diferencias alfabéticas.

Los algoritmos para la clasificación de los personajes son bastante largos y engorrosos de explicar. Por lo tanto, en esto Pista de Linux Artículo, daremos una breve descripción de la codificación de caracteres y la clasificación de la media basada en varios datos locales. Luego explicaremos cómo usar las dos características básicas que C proporciona C para manejar las cadenas de caracteres en función del lenguaje y la recopilación de los diversos datos locales utilizados en la computación.

Es muy importante aclarar que la codificación unicode es una codificación de múltiples bytes, por lo que un personaje puede ocupar múltiples "chars". Aunque, en este artículo, veremos las dos funciones básicas para manejar los caracteres con la recopilación en los datos del tipo "Char". El "wchar.H ”El encabezado define los caracteres multibyte y proporciona funciones similares para manejar a los personajes con gran tamaño.

Codificación de caracteres

La codificación de caracteres es la asignación de un valor numérico binario representativo a cada carácter alfabético, símbolo, carácter especial o carácter de control

El código ASCII es uno del lenguaje "I" C más simple y más utilizado. Es la codificación que generalmente usamos para los caracteres de tipo "char" que ponemos en cuerdas. Esta codificación utiliza un solo byte por personaje, 7 bits para representar cada personaje de la mayoría de los alfabetos occidentales, así como su control y caracteres especiales. El bit restante se usa para verificar la paridad durante la detección de errores. En la versión extendida, los 8 bits se utilizan para representar los caracteres adicionales.

Si bien ASCII cumplió con los requisitos de la mayoría de los alfabetos latinos occidentales, no lo hizo para los alfabetos orientales. La codificación unicode incluye todos los caracteres de los alfabetos de todos los idiomas occidentales y orientales. Es por eso que actualmente es uno de los más utilizados, gracias a su portabilidad en la codificación de texto, su flexibilidad y compatibilidad con el código ASCII.

Este extenso conjunto de caracteres codificados se divide en grupos, cada uno de los cuales tiene un orden lexicográfico específico para formar el alfabeto para cada idioma o región.

Colación de personajes

La portabilidad e intercambio de información a menudo significa que tenemos que procesar los caracteres y archivos escritos en otra región. El orden lexicográfico de los caracteres que se usa en el alfabeto que los creó no coincide con el que utiliza nuestro sistema.

Un ejemplo de esto es la diferencia entre el alfabeto latino que tiene 26 letras y el alfabeto español que tiene 27 letras. En el alfabeto latino, la letra que sigue a la "n" es la "o". Pero en el alfabeto español, es seguido por "ñ". A continuación, vemos una tabla con estas letras y su número decimal de representación en ASCII:

Inglés Español
norte 110 norte 110
O 111 NORTE 165

Estas diferencias hacen que sea necesario reorganizar los caracteres de acuerdo con el alfabeto y la zona en la que se debe interpretar el texto.

Datos locales del sistema operativo

Cada vez que encendemos nuestra computadora, Linux carga un conjunto de parámetros predefinidos establecidos durante la instalación o más tarde modificados por el usuario que determina el idioma, la codificación, el tipo de caracteres utilizados y las reglas de clasificación para la región. Esto determina cómo el sistema se presenta y muestra el texto

Estos parámetros se denominan datos locales. Podemos mostrarlos en la consola de Linux usando el siguiente comando:

~ $ local

Este comando se muestra en la consola. Entre otras cosas, los parámetros para los datos locales, el lenguaje, la codificación de caracteres y la clasificación del sistema para esa región.

Como podemos ver en la figura, la codificación del idioma inglés regional de los Estados Unidos es EN_US.UTF-8. Para ver la lista de diferentes datos y codificaciones locales instalados en nuestro sistema operativo, necesitamos ejecutar el siguiente comando:

~ $ loce -a

La siguiente figura muestra la lista de datos locales que se instalan en el sistema operativo.

Tenga en cuenta que si bien el idioma es el mismo para todas las opciones, en este caso es el inglés (EN), la configuración de codificación y clasificación no lo son. El de los Estados Unidos es "en_us", mientras que el de Canadá es "in_ ca".

Cómo seleccionar los datos locales de un programa con la función setLocale () en el idioma C

Los mismos parámetros que devuelven el comando "~ $ locale" en la consola de Linux se definen en el "localidad.encabezado h ”en C con sintaxis y representación idénticas y se puede cambiar en la instancia local con la función SetLocale.

Sintaxis de la función setLocale () en el lenguaje C

char* setLocale (int categoría, char* local)

Descripción de la función setLocale () en el idioma C

La función setLocale () selecciona los datos locales que el programa que estamos compilando utiliza. También podemos verificar la configuración actual. Si estos parámetros no son establecidos por esta función en el código, el programa predetermina el uso de los datos locales del sistema en el que se ejecuta.

A continuación, veamos la lista de los parámetros más importantes que cambia o consultas setLocale () que afectan el lenguaje y el proceso de clasificación:

IDIOMA= Modifica o consulta el idioma local.

Lc_ctype= Especifica o consulta el tipo de caracteres para el local.

Lc_numérico= Especifica o consulta el tipo de caracteres numéricos.

LC_TIME= Especifica o consulta los datos del calendario y el tiempo para la configuración local.

Lc_collate= Especificar o consultar las reglas de recopilación de personajes.

LC_All= Especifica o consulta todo el conjunto de datos locales.

La función strxfrm () se define en la "cadena.encabezado. Para usarlo, debemos incluirlo en nuestro código de la siguiente manera:

#incluir

Cómo consultar la configuración de la configuración regional actual del sistema con la función setLocale () en c

La función setLocale proporciona la capacidad de cambiar los datos de la configuración regional en general o cada uno de sus parámetros individualmente. También proporciona la posibilidad de consultar la configuración usada.

Para hacer esto, debemos llamar a la función setLocale () y pasar el parámetro que queremos consultar como el primer argumento de entrada y una cadena vacía como el segundo argumento.

La función setLocale () devuelve el puntero a una cadena que contiene el nombre de los datos de la configuración regional actuales. El siguiente es el código que consulta la configuración actual y la muestra en la consola de comando:

#incluir
#incluir
#incluir
vacío principal ()
char* c_ptr;
c_ptr = setLocale (lc_all, "");
printf ("\ n \ n \ ncurrent local de datos locales es: %s \ n \ n", c_ptr);

Como se ve en la siguiente imagen, SetLocale devuelve una cadena con la configuración regional actual:

Cómo seleccionar la configuración local y de recopilación actual con la función setLocale () en c

La función setLocale () se puede usar para seleccionar o cambiar los datos locales en general con "LC _ALL" o mediante los parámetros individuales para realizar la recopilación de caracteres en función del rango que elegimos.

Para hacer esto, necesitamos llamar a la función setLocale () y pasar el parámetro que queremos cambiar como el primer argumento y una cadena con la configuración local que queremos seleccionar como el segundo argumento.

Aquí está el código para seleccionar la recopilación local de la localidad de Canadá UTF-8:

#incluir
#incluir
#incluir
vacío principal ()
SetLocale (LC_ALL ", EN_CA.Utf-8 ");

Como hemos visto hasta ahora, la clasificación está completamente vinculada al lugar seleccionado. A continuación, veamos las dos funciones que el idioma C proporciona para manejar las cadenas en función de nuestra configuración local elegida: strxfrm () y strcoll ().

Función strxfrm () en lenguaje C

Sintaxis:

int strxfrm (char* s1, char* s2, int n)

Descripción de la función strxfrm () en el idioma C

La función strxfrm () copia la cadena "S2" con los caracteres "N" y la almacena para convertirla a "S1" en la recopilación de la ubicación que se selecciona con SetLocale (). Si la configuración local no se selecciona previamente con SetLocale (), la recopilación se basa en la configuración del sistema actual.

La función strxfrm () devuelve un entero con el número de caracteres que toma la nueva cadena, ya que el número de caracteres en la recopilación puede ser más o menor que el de la cadena original.

La función strxfrm () funciona de manera similar a la función strcpy (), excepto que nos permite especificar qué reglas de configuración de zona debe devolver la nueva cadena. Esto agrega flexibilidad al uso de esta función, ya que podemos usar setLocale () y strxfrm () para convertir las cadenas con el localización que elegimos, así como crearlas.

La función strxfrm () se define en la "cadena.encabezado. Para usarlo, debemos incluirlo en nuestro código de la siguiente manera:

#incluir

Cómo convertir una cadena con una configuración regional y un orden de clasificación específico utilizando la función strxfrm () en c

En este ejemplo, creamos la cadena "str_2" con datos locales de los Estados Unidos y la convertimos en la cadena "str_1" con datos locales configurados para España.

Para hacer esto, usamos el setLocale () para establecer el orden de clasificación para la ubicación de España lc _collate = "es_es". Convertimos "str_2" en la cadena "str_1" con strxfrm (). Puede encontrar el código para este propósito en la siguiente ilustración:

#incluir
#incluir
#incluir
vacío principal ()
char str_1 [100];
char str_2 [100];
int cn;
cn = strcpy (str_2, "Linux Sugerencia");
setLocale (lc_all, "sp_sp");
cn = strxfrm (str_1, str_s, cn);

Función strcoll () en lenguaje C

Sintaxis:

int strcoll (char* s1, char* s2)

Descripción de la función strcoll () en el idioma C

La función strcoll () compara la cadena "S2" con la cadena "S1" basada en la recopilación de la configuración local seleccionada con SetLocale (). Si la configuración local no se selecciona previamente con SetLocale (), la recopilación se basa en la configuración del sistema actual.

La función strcoll () devuelve un entero igual a 0 si las cadenas son iguales. El resultado es mayor que 0 si S2 es mayor que S1. El resultado es inferior a 0 si es inferior a S1.

Esta función funciona de manera similar a strcmp () con la diferencia que podemos usarla para especificar qué reglas de configuración de zona realizan las cadenas deben compararse con.

La función strcoll () se define en la "cadena.encabezado. Para usarlo, tenemos que incluirlo en nuestro código de la siguiente manera:

#incluir

Compare dos cadenas utilizando la configuración de clasificación específica con la función strcoll () en c

En este ejemplo, comparamos la cadena "str_2" con la cadena "str_1" usando una configuración de clasificación específica. En este caso es el español de Argentina, a saber, "es_ AR".

Para este propósito, creamos dos cadenas que contienen el mismo texto, excepto que "str_2" tiene un acento en la quinta letra. El acento es un símbolo sobre una letra utilizada en español, por lo que el glifo para este personaje es diferente. Luego, establecemos el lugar para Argentina y comparamos las cadenas con la función strcoll (). Almacenamos el resultado en el entero "CN" y lo llevamos a la consola de comando con printf ().

El siguiente es el código para esta comparación:

#incluir
#incluir
#incluir
vacío principal()
char str_1 [100] = "Hola mundo";
char str_2 [100] = "Hellor World";
int cn;
setLocale (lc_all, "es_ar");
cn = strcoll (str_1, str_2);
printf ("%I", CN);

Conclusión

En este artículo de Linux Sugerencia, explicamos brevemente qué significa la codificación de personajes en la informática para que tenga una idea más clara de lo que significa codificación de personajes dependiendo de las configuraciones locales utilizadas por los sistemas informáticos. Luego, le mostramos cómo usar las dos características básicas que proporciona el lenguaje C para manejar las cadenas de recopilación de personajes. Esperamos que este artículo te sea útil. Para obtener más artículos sobre el lenguaje C y los consejos de Linux, use el motor de búsqueda del sitio.