stringtranslate.com

Clasificación de caracteres C

La clasificación de caracteres de C es un grupo de operaciones en la biblioteca estándar de C que prueban la pertenencia de un carácter a una clase particular de caracteres, como alfabéticos, de control, etc. Se admiten caracteres de un solo byte y caracteres anchos. [1]

Historia

Los primeros programadores de C que trabajaban en el sistema operativo Unix desarrollaron modismos de programación para clasificar caracteres. Por ejemplo, el código siguiente se evalúa como verdadero para un carácter de letra ASCII :c

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

Finalmente, la interfaz para la funcionalidad de clasificación de caracteres comunes se codificó en el archivo de la biblioteca estándar C ctype.h .

Implementación

Por cuestiones de rendimiento, las funciones de clasificación de caracteres estándar suelen implementarse como macros en lugar de funciones . Sin embargo, debido a las limitaciones de la evaluación de macros, en la actualidad no suelen implementarse como en las primeras versiones de Linux, como:

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

Esto puede generar un error cuando el parámetro de la macro xse expande a una expresión con un efecto secundario ; por ejemplo: isdigit(x++). Si la implementación fuera una función, x se incrementaría solo una vez. Pero para esta definición de macro, se incrementa dos veces.

Para eliminar este problema, una implementación común es que la macro utilice la búsqueda en la tabla. Por ejemplo, la biblioteca estándar proporciona una matriz de 256 números enteros (uno para cada valor de carácter) que contienen cada uno un campo de bits para cada clasificación admitida. Una macro hace referencia a un número entero por el índice del valor del carácter y accede al campo de bits asociado. Por ejemplo, si el bit bajo indica si el carácter es un dígito, la isdigitmacro podría escribirse como:

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

Al argumento macro, c, se hace referencia solo una vez, por lo que se evalúa solo una vez.

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 a la configuración regional efectiva.

Referencias

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

Enlaces externos