Cadenas de Caracteres en Lenguaje C
Cadenas de Caracteres en Lenguaje C
Cadenas de Caracteres en Lenguaje C
Cadenas de Caracteres
4.5. Cadenas de Caracteres
Definicin
En C y C++ las cadenas de caracteres no son ms que arreglos de caracteres, salvo
que a este tipo de arreglos el compilador les da un tratamiento especial. Usted puede
manipular las cadenas de caracteres de la misma manera en que manipula cualquier otro
tipo de arreglo, sin embargo, es preferible hacer uso de una librera estndar especialmente
escrita para manipulacin de cadenas de caracteres, me refiero a la librera <string.h> y que
viene incluida con todo compilador de C o C++.
Recordando la presentacin de arreglos hecha en los puntos anteriores podemos ver
una cadena de caracteres como un vector de caracteres que ocupa una porcin de memoria
RAM conteniendo caracteres ASCII.
En C y C++ una cadena es estrictamente una
secuencia de cero o ms caracteres seguidas por un carcter NULL cuyo cdigo es cero y
se puede escribir como todo cdigo ASCII en octal precedido de una barra: \0
Supongamos por ejemplo que se almacena en una cadena de longitud mxima 10, la
secuencia EJEMPLO 1:
E
\40 1
\0
Observe que las posiciones van desde 0 a 9, tambin fjese que el espacio en blanco (cuyo
cdigo ASCII en decimal es 32 y en octal es 40) ocupa un lugar y que al final se encuentra el
carcter NULL.
Cuando manejamos a las cadenas como simples arreglos de caracteres, es
importante preservar el carcter de terminacin NULL, ya que con ste es como C define y
maneja las longitudes de las cadenas. Todas las funciones de la biblioteca estndar de C lo
requieren para una operacin satisfactoria. En cambio cuando manipulamos las cadenas
con las funciones especiales de dicha biblioteca, nos despreocupamos del carcter NULL,
ya que automticamente se coloca al final de la cadena resultante.
Por lo tanto se recomienda usar las funciones para manejo de cadenas y no tratar de
manipular las cadenas en forma manual desmantelando y ensamblando cadenas.
A continuacin veamos el siguiente ejemplo de declaracin de cadenas y
asignaciones de valores, para aclarar algunos detalles:
char CAD1 [ ] = FACULTAD; // manipulacin como cadena
typedef char cadena8[9];
cadena50 CAD2 = {F , A , C , U , L , T , A , D , \0} , CAD3; // como vector
.
CAD3 = FACULTAD;
Lectura y Escritura
Para realizar la lectura e impresin de una cadena se puede recurrir a las siguientes
funciones de la biblioteca <stdio.h>:
1) Para leer una o varias cadenas desde el teclado, la funcin scanf utiliza la
especificacin de formato %s, por ejemplo:
gets(CAD1)
2) Para escribir una o varias cadenas en la pantalla, la funcin printf utiliza la
especificacin de formato %s, por ejemplo:
puts(CAD1)
Ing. Jorge Buabud
manipular
strlen(S)
Ejemplo:
char nombre[ ] = "Dante O. Diambra";
printf(La longitud de \ %s \ es %d,nombre, strlen(nombre));
Ejemplo:
char nombre[ ] = "Dante O. Diambra";
char copia[80];
strcpy(copia, nombre);
printf(La variable <copia> tiene el valor : %s, copia);
Ejemplo:
char nombre1[ ] = " Dante O.";
char copia1[80] = " Diambra";
strcat(copia1, nombre1);
printf(Ahora el apellido est primero: %s , copia1);
strlwr(S)
Ejemplo:
char nombre[ ] = "Dante O. Diambra";
strlwr(nombre);
printf(Ahora qued todo con minsculas: %s, nombre);
Ing. Jorge Buabud
strupr(S)
Ejemplo:
char nombre3[ ] = " Dante O. Diambra;
strupr(nombre3);
printf(Ahora qued todo con maysculas: %s, nombre3);
S2)
desde el inicio hasta el final de S1. Si la operacin es exitosa strstr regresa la direccin, dentro del
bloque de memoria de la cadena, de la primera ocurrencia de S2 en S1, en caso contrario strstr
regresa NULL.
Ejemplo:
char CAD[ ] = "Este es un ejemplo de una bsqueda";
int pos;
pos= strstr(CAD, "un")-CAD;
if (pos>=0) printf( un est en %s , su primer ocurrencia es en la posicin: %d, CAD,pos);
else printf(" un no est en %s , CAD);
strcmp(S1, 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. Para esta comparacin se tiene en cuenta el cdigo ASCII de cada carcter.
Ejemplo:
char CAD4[ ] = "Alba";
char CAD5[ ] = Alberto;
int compara;
compara= strcmp(CAD4,CAD5);
if (compara > 0) printf(%s es mayor que %s,CAD4,CAD5);
else if (compara == 0) printf(%s es igual que %s,CAD4,CAD5);
else printf(%s es menor que %s,CAD4,CAD5);
En este caso se mostrara como resultado que CAD4 es menor que CAD5.
Ing. Jorge Buabud
// como vector
main ()
{
// CAD3 = "FACULTAD";
es incorrecto solo se puede asignar de esta forma en la declaracin
//-----------------------------------------------------------------------------------------------printf("%s %s \n\n",CAD1,CAD2);
CAD1[3] = CAD1[5] = 'I' ;
CAD1[6] = 'T' ;
CAD1[7] = 'A' ;
printf("%s %s \n\n",CAD1,CAD2);
//-----------------------------------------------------------------------------------------------scanf("%s %s", CAD1,CAD2);
printf("%s %s \n\n",CAD1,CAD2);
//-----------------------------------------------------------------------------------------------gets(CAD1);
puts(CAD1);
//-----------------------------------------------------------------------------------------------char nombre[] = "Dante O. Diambra";
printf("La longitud de \" %s \" es %d \n\n",nombre, strlen(nombre));
//-----------------------------------------------------------------------------------------------char copia[80];
strcpy(copia, nombre);
printf("La variable <copia> tiene el valor: %s \n\n", copia);
//-----------------------------------------------------------------------------------------------char nombre1[] = " Dante O.";
char copia1[80] = "Diambra";
strcat(copia1, nombre1);
printf("Ahora el apellido esta primero: %s \n\n" , copia1);
//-----------------------------------------------------------------------------------------------char nombre2[] = "Dante O. Diambra";
strlwr(nombre2);
printf("Ahora quedo todo con minusculas: %s \n\n", nombre2);
//-----------------------------------------------------------------------------------------------char nombre3[] = "Dante O. Diambra";
strupr(nombre3);
printf("Ahora quedo todo con mayusculas: %s \n\n", nombre3);
//-----------------------------------------------------------------------------------------------char CAD[] = "Este es un ejemplo de una busqueda";
int pos;
pos = strstr(CAD, "un")-CAD;
if ( pos >= 0) printf("'un' esta en '%s', su primer ocurrencia es en la posicion: %d \n\n",CAD, pos);
else printf("'un' no esta en '%s' \n\n",CAD);
pos = strstr(CAD, "in")-CAD;
if ( pos >= 0) printf("'in' esta en '%s', su primer ocurrencia es en la posicion: %d \n\n",CAD, pos);
else printf("'in' no esta en '%s' \n\n",CAD);
//-----------------------------------------------------------------------------------------------char CAD4[ ] = "Alba";
char CAD5[ ] = "Alberto";
int compara;
compara= strcmp(CAD4,CAD5);
if (compara > 0) printf("%s es mayor que %s \n\n",CAD4,CAD5);
else if (compara == 0) printf("%s es igual que %s \n\n",CAD4,CAD5);
else printf("%s es menor que %s \n\n",CAD4,CAD5);
//-----------------------------------------------------------------------------------------------getchar();
}