Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
.h) Funciones isalpha, isupper, islower, isdigit, isspace, ispunct, isalnum, toupper, tolower Manejo de Cadenas Librera de manejo de cadenas (string.h)
Cadenas de Caracteres
Es un tipo de dato construido sobre una realidad Oculta una cierta complejidad, el verdadero concepto de una cadena Una cadena realmente se visualiza:
\0
La interfaz string.h nos permite usar la abstraccin string Incluye las funciones necesarias para operaciones con cadenas de caracteres
Al ver una cadena, notamos que es un conjunto de caracteres, un grupo de datos del mismo tipo, y cada uno ocupa una posicin secuencial en memoria Una cadena es un arreglo de caracteres Ejemplo:
Se necesita espacio en memoria para almacenar la cadena Hola, El computador le asigna las direcciones del 1000 al 1003 La cadena Mundo tiene 5 caracteres El computador encuentra que las direcciones a partir del 1004 estn vacas Donde termina Hola y donde comienza Mundo? Para reconocer hasta donde llega el contenido valido de una cadena, se debe ubicar como ultimo
1000 1000 1001 1001 1002 1002 1003 1003 1004 1004 1005 1005 1006 1006 1007 1007 1008 1008 1009 1010
H H o o l l a a M \0 u M n u d n o d o \0
Pide espacio para 10 caracteres en memoria(10 bytes), de los cuales 9 se pueden usar, el ultimo seria para el caracter nulo. Muy probablemente no se usaran los 9 espacios. Ejemplo:
Para acceder a todos los miembros de este arreglo, se puede hacer un lazo desde 0 hasta el elemento revisado sea igual a \0
Interface string.h
string strcpy(string s1, string s2); string strncpy(string s2, string s2, int n); string strcat(string s1, string s2); string strncat(string s2, string s2, n); int strcmp(string s1, string s2);
int strncmp(string s1, string s2,int n) int strlen(string s); string strchr(string s1, char c); string strstr(string s1, string s2);
Ejercicio
}
return(-1); }
H o 0 1
l 2
a \0 3 4
Ejercicio
Escribir la funcin PosPrimeraVocal usando cadenas como un puntero al primer elemento. int PosPrimeraVocal(char *cad) { char *p; for(p = cad; *p!=\0;p++){
La funcin recibe la cadena, como un puntero al primer carcter.
if(EsVocal(*p) return(p);
} return(-1);
*p es equivalente a cad[i], dependiendo de a qu caracter apunta p. Este se ubica al inicio, es decir en cad, y se mueve de uno en uno (p++)
Como cadena de arreglos: int PosPrimeraVocal(char cadena[]); No necesitamos pasar el tamao de la cadena, pues s sabemos hasta dnde llegaremos en un for, hasta que encontremos \0 Como puntero a un caracter int PosPrimeraVocal(char *cadena); Como string int PosPrimeraVocal(string cadena); Las tres formas de funciones significan lo mismo, se puede utilizar cualquiera indistintamente Se puede comenzar considerando a la cadena como un arreglo, y luego en el mismo programa, visualizarla como un puntero, o como un string
Una cadena, declarada de cualquiera de las tres formas, puede mas tarde, ser tratada, con cualquiera de las tres formas
Cualquiera de las tres formas se pueden usar, es indistinto, pues las tres significan lo mismo
Ejercicio
strcpy, copia caracter a caracter de una cadena fuente a una cadena destino. Se puede implementar como punteros, o como arreglos
char *strcpy(char destino[], char fuente[]) { int i; for(i = 0; fuente[i]!=\0;i++){ destino[i] = fuente[i]; } destino[i] = \0; }
char *strcpy(char *destino, char *fuente) { char *p,*q; q = destino; for(p = fuente; *p!=\0;p++){ *q = *fuente; q++; } *q = \0; }
Ejercicio
Implemente la funcin InvertirNombre que recibe un nombre completo, y lo muestra de la siguiente forma: Apellido, nombre. Por ejemplo: Charles Babbage Babbage, Charles Aqu la clave es encontrar el espacio en blanco. Con este ya podemos dividir el nombre en dos: Desde uno despus del espacio en blanco Desde el inicio hasta antes del espacio en blanco Y luego pegar las dos subcadenas, pero al revs Para encontrar el espacio en blanco: Un caracter en una cadena, se usa strchr, que devuelve un puntero al carcter encontrado
Funciones que manipulan cadenas, y dan como resultado una cadena existente, pero manipulada, usualmente retornan dicha cadena ya existente y manipulada, como puntero
La funcin recibe el nombre, y la cadena, donde ira la versin invertida (paso por referencia)
ap = strchr(nombre, );
if(ap == NULL) strcpy(invertido, nombre); else{ strcpy(invertido,ap+1); strcat(invertido, , ); } return(invertido); }
strncat(invertido,nombre, ap-nombre);