PDF de programación - Tema 5: Estructuras de Datos

Imágen de pdf Tema 5: Estructuras de Datos

Tema 5: Estructuras de Datosgráfica de visualizaciones

Publicado el 30 de Noviembre del 2018
947 visualizaciones desde el 30 de Noviembre del 2018
282,4 KB
21 paginas
Creado hace 7a (18/11/2016)
Índice

• Estructuras de datos en Memoria Principal:

– Vectores

– Matrices

– Cadenas de caracteres

– Estructuras

• Estructuras de datos en Memoria Externa:

– Ficheros

Tema: Estructuras de Datos

2

Cadenas de caracteres

• No existe en C un tipo de datos concreto para definir las

cadenas de caracteres o string.

• Una cadena de caracteres en C se implementa como un vector

cuyos elementos son caracteres (tipo char).

• Por convenio, todas las cadenas de caracteres de C finalizan

con el carácter nulo:

‘\0’

• La longitud de la cadena “hola” es igual a 4 caracteres (no se
incluye el carácter nulo para el cálculo de su longitud), pero si
se almacena, la cadena en memoria ocupa el espacio de 5
caracteres.

Tema: Estructuras de Datos

3

Cadenas de caracteres. Declaración

• Para declarar una cadena lo hacemos igual que con los

vectores:

Ejemplo:

char nomb_array [tamaño]

char nombre[20];

char

linea[80];

• La forma de operar con las cadenas de caracteres es igual

que con los arrays, y además se incluyen algunas ventajas.

Tema: Estructuras de Datos

4

Cadenas de caracteres

• Para inicializar una cadena de caracteres podemos hacerlo de

varias formas:

– Mediante caracteres individuales (igual que con los arrays):

• En la declaración

• Con sentencias de asignación o lectura

– En la declaración, mediante un literal cadena

– La cadena completa, directamente desde el teclado

• Es importante observar que las cadenas contienen un carácter

especial más de terminación de cadena, el carácter nulo: ‘\0’

Tema: Estructuras de Datos

5

Cadenas de caracteres. Inicialización

• Mediante caracteres individuales:

– En la declaración

char cadena[] = {‘h’, ‘o’, ‘l’, ‘a’, ‘\0’}

– Con sentencias de asignación o lectura:

cadena[0] = ‘h’;

cadena[1] = ‘0’;



scanf(“%c%c”, &cadena[0], &cadena[1]);



/* En estos casos:

NO se le asigna automáticamente el carácter nulo */

Tema: Estructuras de Datos

6

Cadenas de caracteres. Inicialización

• En la declaración, mediante un literal cadena:

char cadena[] = “hola”;

inicializa la cadena con los caracteres individuales de la
cadena “hola”. Se determina el tamaño basándose en la
longitud de la cadena y añade un carácter más, el carácter
especial de terminación de cadena, carácter nulo: ‘\0’

/* En este caso: SI se le asigna el carácter nulo */

Tema: Estructuras de Datos

7

Cadenas de caracteres. Inicialización

• La cadena completa, directamente desde el teclado: (con scanf

y el formato de lectura %s)

char cadena2[10];

/* tamaño suficiente */

scanf(“%s”, cadena2); /* no lleva & */

lee caracteres hasta encontrar un espacio en blanco, un
tabulador o un salto de línea

(recordar que el nombre del array, representa la dirección de memoria del

comienzo del mismo y por eso no es necesario el operador de dirección & en

scanf)

/* En este caso: SI se le asigna el carácter nulo */

Tema: Estructuras de Datos

8

Cadenas de caracteres. Inicialización

• La cadena completa, directamente desde el teclado: (con gets)

char apellidos[30];

printf (“Escribe tus dos apellidos: ”);

gets (apellidos);

lee caracteres hasta encontrar un encontrar un ‘\n’ (que no
se añade al vector)

(La entrada introducida no debe rebasar el tamaño del vector – 1 (en el ejemplo

29 caracteres). La función gets devuelve la cadena o valor NULL si ha habido un

error.)

/* En este caso: SI se le asigna el carácter nulo */

Tema: Estructuras de Datos

9

Cadenas de caracteres. Inicialización

• La cadena completa, mediante lectura de ficheros de texto:

(con fscanf y el formato de lectura %s)

FILE *fich;

char cadena[10];

/* tamaño suficiente */

fscanf(fich, “%s”, cadena);

/* no lleva & */

lee caracteres hasta encontrar un espacio en blanco, un
tabulador o un salto de línea

(El puntero al fichero se queda posicionado justo después de la cadena, no de su

delimitador)

/* En este caso: SI se le asigna el carácter nulo */

Tema: Estructuras de Datos

10

Cadenas de caracteres. Inicialización

• La cadena completa, mediante lectura de ficheros de texto :

(con fgets)

FILE *fich;
char cadena[30];
int n=29;
fgets (cadena, n, fich);

lee caracteres hasta encontrar un encontrar un ‘\n’ (que no
se añade al vector)

(Lee caracteres del fichero, la lectura termina cuando lee el carácter ‘\n’ , que
también se guarda en la cadena, o bien cuando se han leído n (en el ejemplo 29)
caracteres. El puntero al fichero se queda posicionado justo después del n-ésimo
carácter leído o después del ‘\n’ leído)

/* En este caso: SI se le asigna el carácter nulo */

Tema: Estructuras de Datos

11

Cadenas de caracteres

• Para escribir una cadena de caracteres:

– Con la función printf y %s

printf (“%s”, cadena2);

– Recorriendo los elementos de la cadena:

int i=0;
while (cadena[i] != ‘\0’)
{

printf(“%c”, cadena[i]);
i++;

}

Tema: Estructuras de Datos

12

Cadenas de caracteres

• Otra forma de escribir cadenas de caracteres es con la

función puts() que escribe en la salida una cadena de

caracteres, incluyendo el carácter fin de línea.

Ejemplo:

char apellidos[30];

printf (“Escribe tus dos apellidos: ”);
// lee los 2 apellidos
gets (apellidos);
puts (apellidos);
// escribe los 2 apellidos y salta
// de línea

Tema: Estructuras de Datos

13

Cadenas de caracteres. Resumen

• Escritura en ficheros de texto:

– fprintf(fichero,“%s”, cadena)

– fputs(cadena, fichero)

//escribe la cadena en el fichero sin añadir el salto de línea

//ni el carácter de fin de cadena en la escritura

Tema: Estructuras de Datos

14

Cadenas de caracteres. Resumen

• Se puede trabajar igual que con los arrays.

• Se puede asignar la cadena completa en la declaración:

(asigna automáticamente el ‘\0’)

char

cad[10] =“hola”

• Lectura (asigna automáticamente el ‘\0’) :

– scanf(“%s”, cad) // lee hasta el primer blanco,
tabulador o salto de línea

– gets(cad)

• Escritura:

//lee hasta el primer salto de línea

– printf(“%s”, cad) //escribe sin saltar de línea

– puts(cad)

//escribe y salta de línea

Tema: Estructuras de Datos

15

Cadenas de caracteres. Resumen

Con Ficheros de texto:

• Lectura (asigna automáticamente el ‘\0’) :

– fscanf(F, “%s”, cad) /* lee hasta el primer blanco,

tabulador o salto de línea *7

– fgets(cad, n ,fich) /* lee hasta el primer salto de línea

(que se añade a la cadena) */

• Escritura:

– fprintf(F,“%s”, cad) //escribe sin saltar de línea

– fputs(cad)

//escribe sin saltar de línea

Tema: Estructuras de Datos

16

Ejercicio

• Escribir una función que a partir de una cadena de caracteres

calcule su longitud.

int longitud (char cad[])
{

int i =0;
while ( )

}

Tema: Estructuras de Datos

17

Ejercicio

• Realizar una función C que copie una cadena en otra.

void copiaCad (char c1[], char c2[]) // equivaldría a c1=c2
{

int i=0;
while ( )
{

}
c1[i] = ;

}

Tema: Estructuras de Datos

18

Ejercicio

• Realizar una función que busque un carácter en una cadena
y devuelva, si existe, el índice de la primera aparición y -1 si
no existe.

int buscarCar (char c[], char car)

{

}

//busca el caracter car en la cadena c,

int i=0;

while ( )

if ( )

i= -1;

return i;

Tema: Estructuras de Datos

19

Ejercicio

• Realizar un subprograma C que compare dos cadenas y
devuelva 1 si las cadenas son iguales y 0 en caso contrario.

int iguales (char c1[], char c2[])

//devuelve 1 si las cadenas son iguales y 0 en otro caso

{

}

int i=0;

while ( )

return ;

Tema: Estructuras de Datos

20

Ejercicio

• Realizar un subprograma C que concatene dos cadenas y

la

almacene en otra cadena.

void concatena (char c1[], char c2[], char c3[])

{

// concatena las dos cadenas y trunca la c2 si fuese necesario

int l1, l2, i, final;

l1 = longitud(c1);

l2 = longitud(c2);

if ( ) final = l1+l2;

else final = ;

for (i= ; ; i++)

c3[ ] = c2[ ];

c3[ ]='\0';

}

Tema: Estructuras de Datos

21
  • Links de descarga
http://lwp-l.com/pdf14377

Comentarios de: Tema 5: Estructuras de Datos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad