Está en la página 1de 5

CADENAS DE CARACTERES

Cadena
Es un arreglo lineal de caracteres donde el ltimo elemento es el carcter nulo \0. Las
funciones de manipulacin de cadenas y de lectura y escritura utilizan el carcter nulo
como indicador del fin de la cadena.
Ej:
char c[8];
0 1 2 3 4 5 6 7
U N I \0 F I C
Notas:
En el ejemplo, la cadena slo es UNI ya que el programa considera solamente
como cadena a los elementos que se encuentran antes del carcter nulo.
En la declaracin del ejemplo anterior, el arreglo lineal c tiene 8 caracteres, los
cuales se cuentan desde el 0 al 7, mientras que la cadena tiene 4 elementos: las 3
letras y 1 adicional por el carcter nulo.
La cadena empieza desde la posicin cero del arreglo.
Cada elemento de la cadena es accesible utilizando ndices, igual que cualquier
arreglo lineal.
Ej:
c[3]=-; //carcter guin
c[7]=\0; //carcter nulo

0 1 2 3 4 5 6 7
U N I - F I C \0
En el ejemplo anterior, la nueva cadena c es UNI-FIC debido a que hemos
modificado la posicin del carcter nulo.
Recurdese que una variable tipo char realmente guarda nmeros enteros.
Entonces, en el ejemplo anterior tendramos realmente el siguiente arreglo:
0 1 2 3 4 5 6 7
85 78 73 45 70 73 67 0

Arreglo Lineal de Cadenas
Es un arreglo bidimensional de caracteres, en donde cada fila es una cadena, es decir,
donde al final de cada fila hay un carcter nulo.
char c[5][6];
0 1 2 3 4 5
0

1
U N I \0
2
F I C \0
3
D A C B \0
4


Lectura de Cadenas
Las funciones de lectura de cadenas requieren de la inclusin de la librera stdio.h
para poder ser utilizadas.
scanf y fscanf
Lee y almacena una cadena carcter por carcter, hasta encontrar un espacio en
blanco, tabulacin o salto de lnea, y coloca al final de la cadena el carcter nulo.
Ej:
char c[8];
scanf(%s,&c);
En el ejemplo anterior, si el usuario del programa escribe: UNI FIC
entonces, la cadena c contendr lo siguiente:
0 1 2 3 4 5 6 7
U N I \0
debido a que scanf y fscanf ley solamente hasta el espacio en blanco.
gets
Lee y almacena una cadena leda por teclado, incluyendo espacios en blanco y
tabulaciones, hasta encontrar un salto de lnea. Remplaza el salto de lnea ledo
por el carcter nulo.
Ej:
char c[8];
gets(c);
En el ejemplo anterior, si el usuario del programa escribe: UNI FIC
entonces, la cadena c contendr lo siguiente:
0 1 2 3 4 5 6 7
U N I F I C \0
debido a que gets ley todo hasta el salto de lnea.
fgets
Lee y almacena una cadena leda desde un archivo, incluyendo espacios en
blanco y tabulaciones hasta completar el ancho especificado o hasta encontrar un
salto de lnea, lo que suceda primero. En caso se encuentre un salto de lnea, se
guarda y a continuacin coloca el carcter nulo. El modo de utilizarse es el
siguiente:
fgets(cadena, num_car_guard, punt_arch);
donde:
cadena variable tipo cadena
num_car_guard nmero mximo de caracteres guardados
punt_arch puntero a archivo (variable tipo FILE)
La funcin fgets guarda como mximo num_car_guard caracteres, incluyendo el
carcter nulo. Esto quiere decir que la funcin fgets slo lee num_car_guard-1
caracteres del archivo y guarda un carcter adicional que es el carcter nulo.
Ej:
char c[8];
FILE *f; f=fopen(mi_archivo.txt, r);
fgets(c,6,f);
fclose(f);
En el ejemplo anterior, si el archivo contiene: UNI FIC
entonces, la cadena c contendr lo siguiente:
0 1 2 3 4 5 6 7
U N I F \0
debido a que fgets ley slo 6-1=5 caracteres.

Ej:
char c[10];
FILE *f; f=fopen(mi_archivo.txt, r);
fgets(c,10,f);
fclose(f);

En el ejemplo anterior, si el archivo contiene: UNI FIC
entonces, la cadena c contendr lo siguiente:
0 1 2 3 4 5 6 7 8 9
U N I F I C \n \0
debido a que fgets encontr primero el salto de lnea antes de cumplir con el
ancho especificado.

Escritura de Cadenas
Las funciones de escritura de cadenas requieren de la inclusin de la librera stdio.h
para poder ser utilizadas.
printf y fprintf
Para escribir una cadena, se utiliza %s como especificador de formato. Escribe
los caracteres de la cadena hasta encontrar un carcter nulo.
Ej:
char cad[8];
0 1 2 3 4 5 6 7
U N I \0 F I C
printf(%s,cad);
En el ejemplo anterior, se escribir por pantalla solamente UNI, ya que luego de
la I est el carcter nulo.

Funciones de Manipulacin de Cadenas
Las funciones de manipulacin de cadenas requieren de la inclusin de la librera
string.h para poder ser utilizadas.
strlen
Retorna el nmero de caracteres en la cadena, sin considerar al carcter nulo.
Ej:
char cad[8];
int Long;
0 1 2 3 4 5 6 7
U N I \0 F I C
Long=strlen(cad);
En el ejemplo anterior, Long recibe el valor de 3 porque slo hay 3 caracteres antes
del primer carcter nulo.
strcpy
Copia una cadena sobre otra. No devuelve ningn valor.
Ej:
char cad1[8];
0 1 2 3 4 5 6 7
U N I \0 F I C
char cad2[6];
0 1 2 3 4 5
D A C B \0
strcpy(cad1,cad2);
En el ejemplo anterior, cad1 resulta con el siguiente contenido:
0 1 2 3 4 5 6 7
D A C B \0 I C
y cad2 no cambia.
Ej:
char cad3[8];
strcpy(cad3,2008);
0 1 2 3 4 5 6 7
2 0 0 8 \0
Obsrvese en el ejemplo anterior que una cadena se puede escribir como caracteres
encerrados entre comillas dobles. Esta cadena incluye el carcter nulo al final de los
caracteres.

strcat
Concatena dos cadenas, es decir, coloca una cadena a continuacin de la otra, a
partir del carcter nulo, remplazndolo.
Ej:
char cad1[8];
0 1 2 3 4 5 6 7
U N I \0
char cad2[6];
0 1 2 3 4 5
F I C \0
strcat(cad1,-);
//De donde cad1 resulta con el siguiente contenido:
0 1 2 3 4 5 6 7
U N I - \0
strcat(cad1,cad2);
//De donde cad1 resulta con el siguiente contenido:
0 1 2 3 4 5 6 7
U N I - F I C \0

strcmp
Compara lexicogrficamente dos cadenas y retorna un valor entero. Compara dos
cadenas letra por letra y devuelve un valor segn los cdigos ASCII del primer
carcter diferente entre ambas cadenas. Es decir, si comparamos cad1 con cad2
mediante strcmp(cad1,cad2) obtenemos:
< 0 si cad1<cad2
Valor retornado= = 0 si cad1=cad2
> 0 si cad1>cad2
Ej:
int valor;
char cad1[8];
0 1 2 3 4 5 6 7
U N I \0
char cad2[6];
0 1 2 3 4 5
F I C \0
valor=strcmp(cad1,cad2);
En el ejemlo anterior, valor toma un valor mayor que cero ya que cad1>cad2,
porque U>F.

Ej:
int valor;
char cad1[8];
0 1 2 3 4 5 6 7
F I A \0
char cad2[6];
0 1 2 3 4 5
F I C \0
valor=strcmp(cad1,cad2);
En el ejemlo anterior, valor toma un valor menor que cero ya que cad1<cad2,
porque A<C. Se comparan el tercer carcter porque los dos primeros
caracteres son iguales.
Ej:
int valor;
char cad1[8];
0 1 2 3 4 5 6 7
F I E E \0
char cad2[6];
0 1 2 3 4 5
F I E \0
valor=strcmp(cad1,cad2);
En el ejemlo anterior, valor toma un valor mayor que cero ya que cad1>cad2,
porque E>\0. Si una cadena es igual a la otra hasta el final de una de ellas, se
compara el carcter nulo con el carcter de la cadena ms larga.
Ej:
int valor;
char cad1[8];
0 1 2 3 4 5 6 7
U N I \0
char cad2[6];
0 1 2 3 4 5
U N I \0
valor=strcmp(cad1,cad2);
En el ejemlo anterior, valor toma un valor igual a cero ya que cad1=cad2,
porque \0=\0.

También podría gustarte