Manejo De Cadenas String.h
Enviado por stifler1992 • 19 de Abril de 2013 • 1.657 Palabras (7 Páginas) • 539 Visitas
17. Manejo de cadenas <string.h>
Recordando la presentación de arreglos hecha (capítulo 5) en donde las cadenas están definidas como un arreglo de caracteres o un apuntador a una porción de memoria conteniendo caracteres ASCII. Una cadena en C es una secuencia de cero o más caracteres seguidas por un caracter NULL o \0:
Figura 17.1: Representación de un arreglo.
Es importante preservar el caracter de terminación NULL, ya que con éste es como C define y maneja las longitudes de las cadenas. Todas las funciones de la biblioteca estándar de C lo requieren para una operación satisfactoria.
En general, aparte de algunas funciones restringidas en longitud (strncat(), strncmp() y strncpy()), al menos que se creen cadenas a mano, no se deberán encontrar problemas. Se deberán usar las funciones para manejo de cadenas y no tratar de manipular las cadenas en forma manual desmantelando y ensamblando cadenas.
17.1 Funciones básicas para el manejo de cadenas
Todas las funciones para manejo de cadenas tienen su prototipo en:
#include <string.h>
Las funciones más comunes son descritas a continuación:
• char *strcpy(const char *dest, const char *orig) -- Copia la cadena de caracteres apuntada por orig (incluyendo el carácter terminador '\0') al vector apuntado por dest. Las cadenas no deben solaparse, y la de destino, debe ser suficientemente grande como para alojar la copia.
• int strcmp(const char *s1, const char *s2) -- Compara las dos cadenas de caracteres s1 y s2. Devuelve un entero menor, igual o mayor que cero si se encuentra que s1 es, respectivamente, menor que, igual a, o mayor que s2.
• char *strerror(int errnum) -- Devuelve un mensaje de error que corresponde a un número de error.
• int strlen(const char *s) -- Calcula la longitud de la cadena de caracteres.
• char *strncat(char *s1, const char *s2, size_t n) -- Agrega n caracteres de s2 a s1.
• int strncmp(const char *s1, char *s2, size_t n) -- Compara los primeros n caracteres de dos cadenas.
• char *strncpy(const char *s1, const char *s2, size_t n) -- Copia los primeros n caracteres de s2 a s1.
• strcasecmp(const char *s1, const char *s2) -- versión que ignora si son mayúsculas o minúsculas de strcmp().
• strncasecmp(const char *s1, const char *s2, size_t n) -- versión insensible a mayúsculas o minúsculas de strncmp() que compara los primeros n caracteres de s1.
El uso de muchas funciones es directo, por ejemplo:
char *s1 = "Hola";
char *s2;
int longitud;
longitud = strlen("Hola"); /* long = 4 */
(void) strcpy(s2,s1);
Observar que tanto strcat() y strcopy() regresan una copia de su primer argumento, el cual es el arreglo destino. Observar también que orden de los argumentos es arreglo destino seguido por arreglo fuente lo cual a veces es una situación para hacerlo incorrectamente.
La función strcmp() compara lexicográficamente las dos cadenas y regresa:
• Menor que cero -- si s1 es léxicamente menor que s2;
• Cero -- si s1 y s2 son léxicamente iguales;
• Mayor que cero -- si s1 es léxicamente mayor que s2;
Las funciones de copiado strncat(), strncmp() y strncpy() son versiones más restringidas que sus contrapartes más generales. Realizan una tarea similar, pero solamente para los primeros n caracteres. Observar que el caracter de terminación NULL podría ser violado cuando se usa estas funciones, por ejemplo:
char *s1 = "Hola";
char *s2 = 2;
int longitud = 2;
(void) strncpy(s2, s1, longitud); /* s2 = "Ho" */
donde s2 no tiene el terminador NULL.
17.1.1 Búsqueda en cadenas
La biblioteca también proporciona varias funciones de búsqueda en cadenas.
• char *strchr(const char *s, int c) -- Devuelve un puntero a la primera ocurrencia del carácter c en la cadena de caracteres s.
• char *strrchr(const char *s, int c) -- Encuentra la última ocurrencia del caracter c en la cadena.
• char *strstr(const char *s1, const char *s2) -- Localiza la primera ocurrencia de la cadena s2 en la cadena s1.
• char *strpbrk(const char *s1, const char *s2) -- Regresa un apuntador a la primera ocurrencia en la cadena s1 de cualquier carácter de la cadena s2, o un apuntador nulo si no hay un caracter de s2 que exista en s1.
• size_t strspn(const char *s1, const char *s2) -- Calcula la longitud del segmento inicial de s1 que consta únicamente de caracteres en s2.
• size_t strcspn(const char *s1, const char *s2) -- Regresa el número de caracteres al principio de s1 que no coinciden con s2.
• char *strtok(char *s1, const char *s2) -- Divide la cadena apuntada a s1 en una secuencia de ``tokens'', cada uno de ellos esta delimitado por uno o más caracteres de la cadena apuntada por s2.
Las funciones strchr() y strrchr() son las más simples de usar, por ejemplo:
char *s1 = "Hola";
char *resp;
resp = strchr(s1,'l');
Después de la ejecución, resp apunta a la localidad s1 + 2.
La función strpbrk() es una función más general que busca la primera ocurrencia de cualquier grupo de caracteres, por ejemplo:
char *s1 = "Hola";
char *resp;
res = strpbrk(s1,"aeiou");
En este caso, resp apunta a la localidad s1 + 1, la localidad
...