stringtranslate.com

Clasificación de caracteres C

La clasificación de caracteres 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 anchos y de un solo byte. [1]

Historia

Los primeros programadores en lenguaje C que trabajaron en el sistema operativo Unix desarrollaron modismos de programación para clasificar caracteres en diferentes tipos. Por ejemplo, para el juego 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 deseable introducir formas breves y estandarizadas de tales 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 están escritas como pruebas de comparación. En la mayoría de las bibliotecas C, están escritas 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, organizados 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

#definir es dígito(x) (TABLA[x] y 1)

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

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

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

Resumen 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 según la localidad efectiva.

Referencias

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

enlaces externos