Manejo de Strings
Manejo de Strings
Germán Robles
1
int isspace( int c ); Devuelve un valor verdadero si c es un carácter de espacio en blanco
(nueva línea (‘\n’), espacio (‘ ’), avance de página (‘\f’), retorno de
carro (‘\r’), tabulador horizontal (‘\t’) o tabulador vertical (‘\v’); de
lo contrario devuelve 0.
int iscntrl( int c ); Devuelve un valor verdadero si c es un carácter de control; de lo
contrario devuelve 0 (falso).
int ispunct( int c ); Devuelve un valor verdadero si c es un carácter de impresión
diferente de un espacio, un dígito o una letra; de lo contrario
devuelve 0.
int isprint( int c ); Devuelve un valor verdadero si c es un carácter de impresión,
incluso el espacio (‘ ’); de lo contrario devuelve 0.
int isgraph( int c ); Devuelve un valor verdadero si c es un carácter de impresión
diferente del espacio (‘ ’); de lo contrario devuelve 0.
Germán Robles
2
El código de arriba utiliza el operador condicional (?:) con cada función para determinar
si una cadena “ es un” o la cadena “ no es un ” debe imprimirse en la salida de cada carácter
evaluado. Por ejemplo, la expresión
isdigit( ‘8’ ) ? “8 es un ” : “8 no es un ”
indica que si ‘8’ es un dígito [es decir, isdigit devuelve un valor verdadero (diferente de 0)],
se imprime la cadena “8 es un”, y si ‘8’ no es un dígito (es decir, isdigit devuelve 0), se
imprime la cadena “8 no es un”.
La función isspace determina si su argumento es uno de los siguientes caracteres de
espacio en blanco (‘ ’), avance de página (‘\f’), nueva línea (‘\n’), retorno de carro (‘\r’),
tabulador horizontal (‘\t’) o el tabulador vertical (‘\v’). La función iscntrl determina si su
argumento es uno de los siguientes caracteres de control; tabulador horizontal (‘\t’),
tabulador vertical (‘\v’), avance de página (‘\f’), alerta (‘\a’), retroceso (‘\b’), retorno de
carro (‘\r’) o nueva línea (‘\n’). La función ispunct determina si su argumento es un carácter
de impresión diferente del espacio, un dígito o una letra, tal como $, #, (, ), [, ], {, }, ;, : o %.
La función isprint determina si su argumento es un carácter que puede desplegarse en la
pantalla (incluso el carácter de espacio). La función isgraph evalúa los mismos caracteres
que isprint; sin embargo, no incluye el carácter espacio.
Germán Robles
3
Biblioteca de manipulación de strings
La biblioteca de manipulación de cadenas (<string.h>) proporciona muchas funciones
útiles para manipular datos de cadena (copiar y concatenar cadenas), comparar cadenas,
buscar caracteres y otras cadenas dentro de cadenas, separar cadenas en tokens (separar
cadenas en su piezas lógicas) y determinar la longitud de cadenas.
Cada función, excepto strncpy, agrega el carácter nulo a su resultado.
Las funciones strncpy y strncat especifican un parámetro de tipo size_t, el cual es un
tipo predefinido por el estándar de C como el tipo entero del valor devuelto por el operador
sizeof.
Germán Robles
4
agrega al arreglo hasta que se escriben el número total de caracteres especificados en el
tercer argumento.
El código de arriba utiliza strcpy para copiar la cadena completa del arreglo x dentro del
arreglo y, y utiliza strncpy para copiar los primeros 14 caracteres del arreglo x dentro del
arreglo z. Se agrega un carácter nulo (‘\0’) al arreglo z, debido a que la llamada a strncpy
en el programa no escribe un carácter de terminación nulo (el tercer argumento es menor
que la longitud de la cadena del segundo argumento).
Germán Robles
5
Funciones de comparación
Esta sección presenta las funciones de comparación de cadenas, strcmp y strncmp, de la
biblioteca de manipulación de strings.
Prototipo de función Descripción de la función
int strcmp( const char *s1, const char *s2 );
Compara la cadena s1 con la cadena s2. La función
devuelve 0, menor que 0, o mayor que 0, si s1 es igual,
menor, o mayor que s2, respectivamente.
int strncmp( const char *s1, const char *s2, size_t n );
Compara hasta n caracteres de la cadena s1 con la
cadena s2. La función devuelve 0, menor que 0, o
mayor que 0, si s1 es igual, menor, o mayor que s2,
respectivamente.
Este código compara tres cadenas, utilizando las funciones strcmp y strncmp. La función
strcmp compara su primer argumento de cadena con su segundo argumento de cadena,
carácter por carácter. La función devuelve 0 si las cadenas son iguales, un valor negativo si
la primera cadena es menor que la segunda, y un valor positivo si la primera cadena es
mayor que la segunda. La función strncmp es equivalente a strcmp, con la excepción de que
strncmp compara hasta el número especificado de caracteres. La función strncmp no
Germán Robles
6
compara los caracteres que se encuentran después del carácter nulo de una cadena. El
programa imprime el valor entero devuelto por cada llamada de función.
Muestra en pantalla:
Para que comprenda exactamente lo que significa que una cadena sea “más grande que”
o “más pequeña que” otra cadena, considere el proceso de ordenar alfabéticamente una
serie de apellidos. El lector colocaría, sin duda alguna, Martínez antes que Sánchez, debido
a que, en el alfabeto, la primera letra de “Martínez” se encuentra antes que la primera letra
de “Sánchez”. Sin embargo, el alfabeto es más que sólo una lista de 26 letras; es una lista
ordenada de caracteres. Cada letra aparece en una posición específica dentro de la lista.
“Z” es más que sólo una letra del alfabeto; “Z” es específicamente la letra número 26 del
alfabeto.
Funciones de búsqueda
Esta sección presenta las funciones de la biblioteca de manipulación de cadenas que se
utilizan para buscar caracteres y cadenas en otras cadenas. Observe que las funciones
strcspn y strspn devuelven size_t.
Prototipo de función Descripción de la función
char *strchr( const char *s, int c );
Localiza la primera ocurrencia del carácter c en la
cadena s. Si se localiza a c, se devuelve un apuntador a
c en s. De lo contrario, se devuelve un apuntador NULL.
size_t strcspn( const char *s1, const char *s2 );
Determina y devuelve la longitud del segmento inicial
de la cadena s1, que consiste en los caracteres no
contenidos en la cadena s2.
Germán Robles
7
size_t strspn( const char *s1, const char *s2 );
Determina y devuelve la longitud del segmento inicial
de la cadena s1, que consiste sólo en los caracteres
contenidos en la cadena s2.
char *strpbrk( const char *s1, const char *s2 );
Localiza la primera ocurrencia en la cadena s1 de
cualquier carácter de la cadena s2. Si se localiza un
carácter de la cadena s2, se devuelve un apuntador al
carácter de la cadena s1. De lo contrario, se devuelve
un apuntador NULL.
char *strrchr( const char *s, int c );
Localiza la última ocurrencia de c en la cadena s. Si se
localiza a c, se devuelve un apuntador a c en la cadena
s. De lo contrario, se devuelve un apuntador NULL.
char *strstr( const char *s1, const char *s2 );
Localiza la primera ocurrencia en la cadena s1 de la
cadena s2. Si se localiza la cadena, se devuelve un
apuntador a la cadena en s1. De lo contrario, se
devuelve un apuntador NULL.
char *strtok( char *s1, const char *s2 );
Una secuencia de llamadas a strtok separa la cadena
s1 en “tokens” (piezas lógicas como palabras de una
línea de texto) separados por caracteres contenidos en
la cadena s2. La primera llamada contiene s1 como el
primer argumento, y las llamadas subsiguientes
contienen a NULL como el primer argumento, para
continuar separando la misma cadena. Un apuntador
al token actual es devuelto por cada llamada. Si no hay
más tokens cuando se llama a la función, se devuelve
NULL.
Germán Robles
8
La función strcspn determina la longitud de la parte inicial de la cadena correspondiente
a su primer argumento, la cual no contiene carácter alguno de la cadena de su segundo
argumento. La función devuelve la longitud del segmento.
Germán Robles
9
La función strpbrk busca en su primer argumento la primera ocurrencia de cualquiera de
los caracteres de su segundo argumento. Si un carácter del segundo argumento es
localizado, strpbrk devuelve un apuntador al carácter en el primer argumento; de lo
contrario, strpbrk devuelve NULL.
La función strrchr busca la última ocurrencia del carácter especificado en una cadena. Si
se localiza al carácter, strrchr devuelve un apuntador al carácter en la cadena; de otro
modo, strrchr devuelve NULL.
La función strspn determina la longitud de la parte inicial de una cadena que se
encuentra en su primer argumento, y que contiene sólo caracteres de la cadena en su
segundo argumento. La función devuelve la longitud del segmento.
La función strstr busca la primera ocurrencia de su segundo argumento de cadena en su
primer argumento de cadena. Si se localiza a la segunda cadena en la primera cadena, se
devuelve un apuntador a la ubicación de la cadena en el primer argumento.
La función strtok se utiliza para separar una cadena en una serie de tokens. Un token es
una secuencia de caracteres separados por delimitadores (generalmente espacios o marcas
de puntuación). Por ejemplo, en una línea de texto, cada palabra puede considerarse como
un token, y los espacios que separan a las palabras pueden considerarse delimitadores.
Germán Robles
10
Otras funciones que pueden ser útiles:
size_t strlen( const char *s ); Determina la longitud de la cadena s. Devuelve el
número de caracteres que preceden al carácter de
terminación nulo.
La función strlen toma una cadena como argumento y devuelve el número de caracteres en
la cadena; el carácter nulo no se incluye en la longitud.
Bibliografía
Deitel, H. M. & Deitel, P. J., Cómo programar en C/C++ y Java, 4ta. Ed., Pearson Education,
México, 2004.
Germán Robles
11