You are on page 1of 20

Universidad Autónoma de Ciudad Juárez

Instituto de Ingeniería y tecnología


Dpto. de Ciencias Básicas Exactas

Cadenas

Claudia Ivette Estrada Castro


Matricula: -98412-

Edgar Alexander Garay Gómez

Matricula: -98766-

Programación de Computadoras I
Investigación Bibliográfica
Noviembre del año 2010

Indice
1 Cadenas 3

1.1 Declaracion de variables de cadena 5


1.2 Inicializacion de variables de cadena 6
1.3 Lectura de cadena 7
1.3.1 Reglas para lectura y escritura de cadenas 8
1.4 Funcion getchar 9
1.5 Funcion putchar 12
1.6 Funcion puts 14
1.7 Funciones de manejo de cadenas 16
Referencias Documentales 20

2
1 Cadenas

El lenguaje C no tiene datos predefinidos tipo cadena (string). En su lugar C,


manipula cadenas mediante arreglos de caracteres.

Una cadena (también llamada constante de cadena o literal de cadena) es un


tipo de dato compuesto, un arreglo de caracteres (char o unsignedchar), terminado por
un carácter nulo (/0), NULL.

Un ejemplo sencillo de una cadena es: " ABC"

En consecuencia, se considerará que la cadena "ABC" es un array de cuatro


elementos de tipo char. El valor real de esta cadena es la dirección de su primer
carácter y su tipo es un puntero a char.

Aplicando el operador * a un puntero a char se obtiene el carácter que forma su


contenido; es posible también utilizar aritmética de direcciones con cadenas:

Ejemplo:
Como acceder al contenido de la cadena “ABC” utilizando punteros

* "ABC” es igual a 'A'


* ("ABC" + 1) es igual a 'B'
* ("ABC" + 2) es igual a 'C'
* ("ABC" + 3) es igual a '\0'

Como acceder al contenido de la cadena “ABC” utilizando el subíndice del arreglo

“ABC” [0] es igual a ‘A’

3
“ABC” [1] es igual a ‘B’
“ABC” [2] es igual a ‘C’
“ABC” [3] es igual a ‘/0’

Ejemplo:
Almacenar la cadena “MERIDA” en un vector llamado ciudad.
No. de Valor del Elemento del Carácter de la
Elemento índice vector cadena
1 0 ciudad [0] ‘M’
2 1 ciudad [1] ‘E’
3 2 ciudad [2] ‘R’
4 3 ciudad [3] ‘I’
5 4 ciudad [4] ‘D’
6 5 ciudad [5] ‘A’
7 6 ciudad [6] ‘\0’

4
1.1 Declaración de variables de cadena

Las cadenas se declaran como los restantes tipos de arrays. El operador [ ] que
contiene el tamaño máximo del objeto. El tipo base, naturalmente, es char o bien
unsigned char:

char texto [81]; / * una línea de caracteres de texto * /

Ejemplo:
Declaración de una Cadena de Caracteres

#define MAXCAR 256 // Numero máximo de caracteres es 256 //


char palabra[MAXCAR];

Se puede inicializar la cadena de caracteres al declararla:

char palabra [MAXCAR] = {‘H’, ‘o’, ‘l’, ‘a’, ‘\0’};


char palabra [MAXCAR] = “Hola”;
char palabra[ ] = “Hola”; // Longitud máxima de la cadena es 5//

5
1.2 Inicialización de variables de cadena

Todos los tipos de arreglos requieren una inicialización (iniciación) que consiste
en una lista de valores separados por comas y encerrados entre llaves.

Ejemplos:
char texto [81] = "Esto es una cadena.";
char textodemo [255] = "Esta es una cadena muy larga";
char cadenatest [ ] = "Cuál es la longitud de esta cadena?";

Las cadenas texto y textodemo pueden contener 80 y 254 caracteres


respectivamente más el carácter nulo.

La tercera cadena, cadenatest, se declara con una especificación de tipo


incompleta y se completa sólo con el inicializador. Dado que en el literal hay 36
caracteres y el compilador añade el carácter ‘/0’, un total de 37 caracteres se asignarán
a cadenatest.

Ejemplo:
Error en la inicialización.
Una cadena no se puede inicializar fuera de la declaración.

Unacadena = "ABC";

6
Si esto se hace de esta manera, C dará un error al compilar.
1.3 Lectura de cadena

La lectura usual de datos se realiza con la función scanf ( ), cuando se aplica a


datos cadena el código de formato es %s. La función da por terminada la cadena
cuando encuentra un espacio (un blanco) o fin de línea. Esto puede producir anomalías
al no poder captar cadenas con blancos entre caracteres.

Ejemplo:
/ * Este programa muestra cómo scanf lee datos cadena * /

#include <stdio.h>
void main ( )
{
char nombre [30]; / * Define arreglo de caracteres * /
scanf("%s", nombre); / * Leer la cadena * /
printf( "%s\n", nombre); / * Escribir la cadena nombre * /
}

El programa define nombre como un arreglo de caracteres de 30 elementos.


Suponiendo que se introduce la entrada Pepe Margolles, cuando ejecuta el programa
se visualizará en pantalla Pepe. Es decir, la palabra Margolles no se ha asignado a la
variable cadena nombre. La razón es que la función scanf ( ) termina la operación de
lectura siempre que se encuentra un espacio en blanco o fin de línea.

7
El método recomendado para lectura de cadenas será utilizar una función
denominada gets ( ). La función gets ( ) permitirá leer la cadena completa, incluyendo
cualquier espacio en blanco, termina al leer el carácter de fin de línea.
1.3.1Reglas para Lectura y Escritura de Cadenas de Caracteres.
Leer una cadena introducida por teclado:
gets(linea); // Se utiliza para una cadena completa hasta '\n'
scanf(“%s”, palabra); // 1 palabra

Escribir una cadena en la pantalla:


printf(“%s”, palabra);
puts(palabra);

Ejemplo:

1 #include <conio.h>
2 #include <stdio.h>
3 main()
4{
5 char a[100];
6 int i;
7 clrscr( );
8 printf("Dame la cadena: ");
9 gets(a);
10 i=0;
11 while( a[ i ]!='[ ]')
12 {
13 a[ i ]=a[ i ]-32;
14 i++;
15 }
16 puts(a);
17 getch( );

8
18
return 0;
19
}

1.4 Funcion getchar

Mediante la funcion de biblioteca getchar se puede conseguir la entrada de


caracteres uno a uno.

La funcion getchar es parte de la biblioteca de C de entrada/salida estándar.


Devuelve un carácter leído del dispositivo de entrada estadar (típicamente un teclado).
La funcion no requiere de argumentos, aunque es necesario que un par de paréntesis
vacios sigan a la palabra getchar.

Si se encuentra una condición de fin de archivo (<<end of file>>) cuando se esta


leyendo un carácter con la funcion getchar, la funcion devolverá de forma automática el
valor de la constante simbólica EOF (Este valor se define dentro del archivo stdio.h
normalmente EOF tendrá asignado el valor de -1). La detección de EOF de esta forma
hace posible descubrir el fin de archivo en el momento y lugar que ocurra. Se puede
entonces actuar en consecuencia.

Sintaxis:
variable de carácter = getchar ( );

Ejemplo:
/*Funcion getch( ). Lectura de variables caracter*/

#include <stdio.h>
#include <conio.h>
void main(void)
{

9
char cletra;
printf(" \n Pulse cualquier tecla para continuar");
cletra=getch();
printf(" \n no se desplegara el caracter en pantalla");
printf("\n Ahora pulse cualquier carácter");
cletra=getche();
printf("\n El caracter leído fue: %c",cletra);
}

Ejemplo:
Muestra que el papel de getchar es almacenar un caracter de la entrada estandar.

#include <stdio.h>

int main( )
{
char C=getchar( );
printf("%d", C);
return 0;
}

Este ejemplo muestra el símbolo ASCII del primer carácter que se ingresó en la entrada
estándar (teclado). Puedes meter todos los caracteres que quieras de todos modos
solo te va a agarrar el primero

10
Ejemplo:
Cuenta las 'A' que hay en el buffer de entrada hasta el enter.

#include <stdio.h>

int main( )
{
char C;
int S=0;

while((C=getchar())!='\n')
if(C=='A')S++;

printf("%d", S);
return 0;
}

11
1.5 Funcion Putchar
Se puede visualizar un caracter utilizando la funcion de biblioteca putchar. Esta
funcion es complementaria a la de entrada de un carácter getchar.

La funcion putchar, asi como getchar, es parte de la biblioteca de


entrada/salida estándar. Trasmite un carácter al dispositivo de salida estándar
(típicamente un monitor). El carácter que se trasmite estará representado normalmente
por una variable de tipo carácter. Se debe proporcionar como argumento de la funcion,
encerrado entre paréntesis, siguiendo a la palabra putchar. La referencia a la funcion
putchar se escribe de la siguiente manera:

putchar (variable de carácter)

Ejemplo:
La función putchar escribe un único carácter en la salida estándar. Su uso en sencillo y
generalmente está implementada como una macro en la cabecera de la biblioteca
estándar.

#include <stdio.h>

main()
{
putchar('H');
putchar('o');
putchar('l');
putchar('a');

putchar(32);

12
putchar('m');
putchar('u');
putchar('n');
putchar('d');
putchar('o');

putchar('\n');
}

El resultado es:

Hola mundo

Ejemplo:
Este ejemplo muestra el caracter que almaceno el getchar( ).

#include <stdio.h>

int main( )
{
char C=getchar();
putchar(C);
return 0;
}

1.6 Función puts ( )


13
La función puts ( ) escribe en la salida una cadena de caracteres, incluyendo el
carácter fin de línea por los que situa el puntero de salida en la siguiente línea. Es la
función recíproca de gets ( ); si gets ( ) capta una cadena hasta fin de línea, puts( )
escribe una cadena y el fin de línea.

La función puts simplemente imprime una cadena de caracteres en la salida


estándar (y produce un salto de línea). Le debemos proporcionar la dirección donde
encontrar la cadena de caracteres.

Ejemplo:
#include <stdio.h>

main()
{
puts("Bienvenido a la programación");
puts(" en lenguaje C");
}

produce el resultado:

Bienvenido a la programación
en lenguaje C

Ejemplo: funcion puts( )

14
Sintaxis: int puts(const char *cadena);

Descripcion: Esta función escribe la cadena apuntado por cadena en el stream


apuntado por stdout, y añade un carácter de línea nueva a la salida. El carácter nulo
final no es escrito.

#include <stdio.h>
int main()
{
char oracion[47] = "Esto es un ejemplo para usar la funcion \'puts\'";
if( puts( oracion ) > 0 ) printf( "\nEl ejemplo ha funcionado correctamente\n" );
else printf( "\nERROR: La funcion no se ha realizado correctamente\n" );
return 0;
}

1.7 Funciones de manejo de cadenas y caracteres


La biblioteca STRING.H

15
La biblioteca estándar de C contiene la biblioteca de cadena STRING.H, que
incorpora las funciones de manipulación de cadenas utilizadas más frecuentemente. El
archivo de cabecera STDIO.H también soporta entradas/salidas de cadenas.

Esto significa que la función espera una cadena que puede o no modificarse. Cuando
se utiliza la función, se puede usar un puntero a char o se puede especificar el nombre
de una variable arreglo char. Cuando se pasa un array a una función, C pasa
automáticamente la dirección del arreglo char.

Funciones básicas para el manejo de cadenas


Todas las funciones para manejo de cadenas tienen su prototipo en #include <string.h>

1) 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.

2) 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.

3) char *strerror(int errnum) -- Devuelve un mensaje de error que corresponde a un


número de error.

4) int strlen(const char *s) -- Calcula la longitud de la cadena de caracteres.

5) char *strncat(char *s1, const char *s2, size_t n) -- Agrega n caracteres de s2 a s1.

6) int strncmp(const char *s1, char *s2, size_t n) -- Compara los primeros n caracteres
de dos cadenas.

16
7) char *strncpy(const char *s1, const char *s2, size_t n) -- Copia los primeros n
caracteres de s2 a s1.

8) strcasecmp(const char *s1, const char *s2) -- versión que ignora si son mayúsculas o
minúsculas de strcmp().

9) 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.

Búsqueda en cadenas
La biblioteca también proporciona varias funciones de búsqueda en cadenas.

1) char *strchr(const char *s, int c) -- Devuelve un puntero a la primera ocurrencia del
carácter c en la cadena de caracteres s.

2) char *strrchr(const char *s, int c) -- Encuentra la última ocurrencia del caracter c en la
cadena.

3) char *strstr(const char *s1, const char *s2) -- Localiza la primera ocurrencia de la
cadena s2 en la cadena s1.

4) 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.

5) size_t strspn(const char *s1, const char *s2) -- Calcula la longitud del segmento
inicial de s1 que consta únicamente de caracteres en s2.

6) size_t strcspn(const char *s1, const char *s2) -- Regresa el número de caracteres al
principio de s1 que no coinciden con s2.

17
7) 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.

Ejemplo:
Uso de funciones strlen y strcpy

char *s1 = "Hola";


char *s2;
int longitud;

longitud = strlen("Hola"); /* long = 4 */


(void) strcpy(s2,s1);

Ejemplo:
Uso de las funciones strchr( ) y strrchr( )

char *s1 = "Hola";


char *resp;

resp = strchr(s1,'l');

Después de la ejecución, resp apunta a la localidad s1 + 2.

Ejemplo: La función strpbrk() es una función más general que busca la primera
ocurrencia de cualquier grupo de caracteres:

char *s1 = "Hola";


char *resp;

18
res = strpbrk(s1,"aeiou");

En este caso, resp apunta a la localidad s1 + 1, la localidad de la primera o.

Ejemplo: La función strstr() regresa un apuntador a la cadena de búsqueda


especificada o un apuntador nulo si la cadena no es encontrada. Si s2 apunta a una
cadena de longitud cero (esto es, la cadena ""), la función regres s1

char *s1 = "Hola";


char *resp;

resp = strstr(s1,"la");

la cual tendrá resp = s1 + 2.

Referencias documentales

19
• Peñaloza Romero, Ernesto. Fundamentos de la programación en C/C++.
Universidad autónoma de México, 2001, 549 pp.

• Byron; Gottfried. Programación en C. Madrid, España, 2005. 659 pp.

• L. Joyanes; I. Zahonero. Programacion en C. metodología, estructura de datos y


objetos. Ed. Mc Graw Hill.

• Arreglos y cadenas. http://www.fismat.umich.mx/mn1/manual/node6.html.

• http://www.fismat.umich.mx/mn1/manual/node18.html. Manejo de cadenas


<string.h>
• https://infoteca.inf.ucv.cl/wp-content/uploads/2009/11/17-Cadenas-de-
Caracteres-C.pdf
• http://cfievalladolid2.net/tecno/cyr_01/control/lengua_C/entra_sal.htm. entrada y
salida de caracteres
• http://cfievalladolid2.net/tecno/cyr_01/control/lengua_C/entra_sal.htm#puts_gets
• http://docs.mis-algoritmos.com/c.funcion.puts.html

20

You might also like