Vous êtes sur la page 1sur 6

CADENAS DE CARACTERES

Objetivo: Aprender a manejar datos alfanumricos y conocer las funciones propias del
Lenguaje de Programacin C para ello.
Introduccin: Hasta el momento hemos trabajado con datos numricos y con ellos hemos
realizado todo tipo de clculos y comparaciones, los datos alfanumricos no se pueden operar
de la misma forma, pero s podemos agregarle un dato alfanumrico a otro del mismo tipo, o
podemos contar cuantas veces aparece una letra determinada en una frase o texto
determinado. Para ello estudiaremos las funciones propias de C que nos sirven para manejar
datos alfanumricos.

I. CADENA DE CARACTERES:
Una CADENA, o string, es un dato alfanumrico, que est formado por un grupo de caracteres,
que desde luego tienen en un momento un `valor` o significado especial.
Por carcter se debe entender una letra, un nmero, o un signo, incluso un espacio en blanco;
podemos decir que, cada smbolo del cdigo ASCII es un carcter y sabemos que este cdigo
est formado por 255 caracteres diferentes.
Un solo carcter siempre lo escribimos dentro de comillas simples, y una cadena dentro de
comillas dobles, por ejemplo:
Caracteres:
n

<

Cadena
Mariana Leiva

Representa
Nombre de una persona

MM10001

Carnet de un alumno

2224-6588

Nmero de telfono

Buenos Das

Una frase que indica un saludo

El lenguaje de programacin C, no tiene un tipo de dato predefinido para las cadenas, el tipo
que maneja es char y las variables que se declaran con ste, pueden almacenar un solo
carcter. Las cadenas o strings se manejan en C, como arreglos (Conjunto de espacios
posiciones) de tipo char y en cada posicin del mismo se almacena un carcter, por lo tanto
una cadena es considerada en C como un vector tipo char:
Nom

0
P

1
e

2
d

3
r

4
o

6
R

7
a

8
m

9
i

10 11
r
e

12
z

13
\0

Las cadenas son conocidas tambin como constantes de cadenas o literales de cadena.

Este lenguaje de programacin siempre agrega el carcter nulo (\0) al final de la cadena, por lo
que hay que considerar este espacio a la hora de declarar el arreglo:
char cad[4] = ABC

// El arreglo cad, tiene 4 elementos, el ltimo es \0

Cuando aparece la cadena dentro de un programa, se almacena como si fueran 4 elementos de


tipo char: A
B C \0,
los cuales pueden ser accesados uno por uno, por medio de sus subndices que indican la
posicin o casilla:
cad[0]
cad[1]
cad[2]
cad[3]

=
=
=
=

A
B
C
\0

Cuando utilizamos printf o puts se copia en la pantalla, carcter por carcter hasta que aparece
el carcter \0

Declaracin de Variables de Cadena:


Son arreglos tipo char, con un carcter ms en su dimensin, para el caracter \0 Ejemplos:
char cad[5];
char cad1[20];
char nom[40], tel[9];

Inicializacin de Variables de Caracteres.


Se puede dar valores iniciales a un vector tipo char, y es est la nica vez que se asigna con el
operador de asignacin = , as :
char frase[12] = Buenos Das
char texto[255] = Esta puede ser una cadena bien larga
char Nom[ ] = Jose Francisco Morales Guevara

Lectura de una cadena de caracteres


La lectura normalmente se realiza con la funcin scanf, siendo el formato de tipo de dato %s, y
no necesita el smbolo &. Ejemplo:
scanf(%s, nombre);

// lee la variable nombre

Esta funcin da por terminada la cadena (o dato a leer) cuando encuentra un espacio en blanco
o el fin de lnea (al presionar enter), para poder leer ms de una palabra en una cadena, se
utiliza el formato [^\n] , por ejemplo:

scanf([^\n]%s, nom);

// Puede leer ms de una palabra

Adems se pueden utilizar las funciones: gets, que lee todos los caracteres digitados hasta
que encuentra el fin de lnea (al presionar enter).
Y se tienen tambin getchar, getch, getche,
funciones de lectura de datos en C.

para leer un solo carcter, recordando las

Salida de Datos alfanumricos


Las cadenas se pueden imprimir con las funciones: printf, utilizando como formato de tipo de
datos %s; puts, que imprime una string; y putchar, para imprimir un solo carcter.

Librera string.h
Es un archivo de cabecera que forma parte de la biblioteca estndar de C, contiene las
funciones necesarias para manipular o trabajar con cadenas, utilizadas ms frecuentemente.

Algunas Funciones de C ms utilizadas:

LIBRERA <string.h>
strlen(cad)

Devuelve la longitud de una string, cad, o nmero de caracteres


que forman la cadena; el carcter nulo no forma parte de la
longitud.

strcat(cad1,cad2)

Concatena o aade la cad2 al final de la cad1, devuelve la nueva


cad1

strncat(cad1,cad2,n)

Concatena los n primeros caracteres de cad2 a cad1, devuelve la


nueva cad1

strcpy(cad2,cad1)

Copia cad2 en cad1, sirve para asignarle valores a una cadena.


Cad1 debe tener espacio suficiente para almacenar cad2.
Devuelve cad1

strncpy(cad1,cad2,n)

Copia los n primeros caracteres de cad2 en cad1

strcmp(cad1,cad2)

Compara las dos cadenas, devuelve un entero con un valor:


> 0 si cad1 > cad2
= 0 si cad1 = cad2
< 0 si cad1 < cas2

stricmp(cad1, cad2)

Compara las dos cadenas sin diferenciar letras maysculas o


minsculas. Los resultados son los mismos que strcmp( )

strncmp(cad1,cad2, n)

Compara un nmero n de caracteres de las 2 cadenas,


devolviendo un entero igual que strcmp( ).

strnicmp(cad1,cad2,n)

Compara los n primeros caracteres de las 2 cadenas, ignorando


las diferencias entre maysculas y minsculas; los resultados sin
los mismos que strcmp( ).

strrev(cad)
strlwr(cad)

Invierte los caracteres de cad. El carcter de terminacin nulo,


permanece en el mismo lugar.
Convierte los caracteres de cad en letras minsculas.

strupr(cad)

Convierte los caracteres de cad en letras maysculas.

LIBRERA
atoi(cad)

<stdlib.h>
Convierte una cadena a un nmero entero. La cadena debe tener la
representacin de un valor entero y el formato siguiente:
[espacio en blanco] [signo] [ddd]
donde:

[espacio en blanco]

Es una secuencia de escape de


tabulacin o un espacio en
blanco y es opcional

[signo]

Puede ser + o -

[ddd]

Cadena de dgitos.

Si la cadena no puede convertir, atoi() devuelve cero.

atof(cad)

Convierte una cadena a un nmero real de tipo double, la cadena debe


tener una representacin de caracteres de un nmero real, termina la
conversin cuando encuentra no reconocido, su formato es:
[espacio en blanco] [signo] [ddd] [.] [e/E] [signo] [ddd]

atol(cad)

Convierte una cadena a un entero largo. El formato de la cadena debe


de ser:
[espacio en blanco] [signo] [ddd]

LIBRERA <ctype.h>
isalnum(carac)

Devuelve cero (0) si el carcter de argumento es un caracter no


alfanumrico (ni letra ni nmero) o un valor distinto de cero (0) si es un
carcter alfanmrico.

isalpha(carac)

Verifica si el carac es un carcter alfabtico. Devuelve cero (0) si carac


no es alfabtico; un valor distinto de cero si carac es alfabtico.

isascii(carac)

Comprueba si carac es un carcter ASCII, en el rango de 0 127. Los


caracteres del 128 al 255 son tratados como no ASCII.
Devuelve cero si carac es no ASCII, y un nmero diferente de cero si
carac es ASCII.

isdigit(carac)

Verifica que carac sea un dgito decimal (0 . . . 9). Devuelve un valor


distinto de cero si carac es un dgito, en caso contrario devuelve cero.

islower(carac)

Verifica si el carcter argumento: carac, es una letra minscula.


Devuelve un valor distinto de cero si es una letra minscula; en otro caso
devuelve cero.

isupper(carac)

Verifica si carac es una letra mayscula. Devuelve cero si no es


mayscula, de lo contrario devuelve un valor distinto de cero.
Convierte un carcter mayscula en minscula, siempre y cuando carac
sea una letra mayscula.

tolower(carac)

toupper(carac)

Convierte una letra minscula en mayscula.

Muchas veces, necesitamos en un programa, leer un valor numrico y a continuacin una


cadena, la entrada del nmero se puede hacer con scanf y la de la cadena con gets:

...
int area;
char cad[81];
...
printf(\n metros cuadrados.\t);
scanf(%i,&area);
printf(\n Nombre de la Finca:);
gets(cad);
...
Al ejecutarse este fragmento de programa, no se puede introducir el nombre de la finca, el
programa le asigna una cadena vaca, ya que al digitar el valor de area y el retorno de carro o
enter, inmediatamente se le asigna la cantidad a area y queda en el buffer interno el caracter de
enter (o fin de lnea), que es el carcter en que termina la captura de una cadena por gets, por

lo no se le asigna ningn carcter a cad. Para lograr leer area y cad se presentan la siguiente
solucin: leer el valor numrico como una cadena de dgitos, y despus transformarla con atoi a
entero

int area;
printf(\n Metros cuadrados:\t);
gets(cad);
area = atoi(cad);
printf(\n Nombre de la finca:\t);
gets(cad);
...