stringtranslate.com

Clasificación de caracteres C

La clasificación de caracteres en C es una operación proporcionada por un grupo de funciones en la biblioteca estándar ANSI C para el lenguaje de programación C. Estas funciones se utilizan para probar la pertenencia de caracteres a una clase particular de caracteres, como caracteres alfabéticos, caracteres de control, etc. Se admiten caracteres de un solo byte y caracteres anchos. [1]

Historia

Los primeros programadores del lenguaje C que trabajaron en el sistema operativo Unix desarrollaron expresiones de programación para clasificar caracteres en diferentes tipos. Por ejemplo, para el conjunto de caracteres ASCII , la siguiente expresión identifica una letra, cuando su valor es verdadero :

( 'A' <= c && c < = 'Z' ) || ( 'a' <= c && c <= 'z' )              

Como esto puede expresarse en múltiples formulaciones, se hizo conveniente introducir formas cortas y estandarizadas de dichas pruebas que se colocaron en el archivo de encabezado de todo el sistema ctype.h .

Implementación

A diferencia del ejemplo anterior, las rutinas de clasificación de caracteres no se escriben como pruebas de comparación. En la mayoría de las bibliotecas de C, se escriben como búsquedas de tablas estáticas en lugar de macros o funciones.

Por ejemplo, se crea una matriz de 256 números enteros de ocho bits, dispuestos como campos de bits, donde cada bit corresponde a una propiedad particular del carácter, por ejemplo, isdigit, isalpha. Si el bit de orden más bajo de los números enteros corresponde a la propiedad isdigit, el código podría escribirse como

#define isdigit(x) (TABLA[x] y 1)

Las primeras versiones de Linux utilizaban un método potencialmente defectuoso similar al primer ejemplo de código:

#define esdigito(x) ((x) >= '0' && (x) <= '9')

Esto puede causar problemas si, cuando se expande la macro, la expresión sustituida por x tiene un efecto secundario . Por ejemplo, si se llama a isdigit(x++) o isdigit(run_some_program()) . No resulta evidente de inmediato que el argumento de isdigit se evalúe dos veces. Por este motivo, generalmente se utiliza el enfoque basado en tablas.

Descripción general de funciones

Las funciones que operan con caracteres de un solo byte se definen en el archivo de encabezado ctype.h ( cctype en C++). Las funciones que operan con caracteres anchos se definen en el archivo de encabezado wctype.h ( cwctype en C++).

La clasificación se evalúa de acuerdo con la configuración regional efectiva.

Referencias

  1. ^ Especificación ISO/IEC 9899:1999 (PDF) . pág. 193, § 7.4.

Enlaces externos