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
607 visualizaciones desde el 30 de Noviembre del 2018
282,4 KB
21 paginas
Creado hace 3a (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
Es necesario revisar y aceptar las políticas de privacidad