Bloque 5

Anuncio
Ing. Informática
Programación I
Bloque 5-II
Bloque 5
Tipos de datos compuestos estáticos:
arrays, strings y structs
Parte II: Strings y structs
Ing. Informática
Programación I
Bloque 5-II
Strings (cadenas de caracteres)
ƒ
ƒ
ƒ
Muy parecido a un array de caracteres
La diferencia principal es que la cadena
debe acabar con el carácter especial ‘\0’
C tiene una librería <string.h> con una
serie de funciones que permiten
trabajar con la cadena entera (no sólo
carácter a carácter como con arrays)
Ing. Informática
Programación I
Bloque 5-II
Declaración de strings
ƒ
Declaración:
ƒ
ƒ
ƒ
char cadena[5];
Recordar que hay que guardar un carácter
para el ‘\0’
Se le puede dar un valor inicial y tratar
carácter a carácter:
char cadena1[5]=”hola”;
char cadena2[5]=”ab”;
cadena1[2]=‘a’;
cadena2[0]=‘c’;
0
1
2
c
b
\0
3
4
0
1
2
3
4
h
o
a
a
\0
Ing. Informática
Programación I
Bloque 5-II
Ejemplo
main()
{
char cadena1[5];
cadena1=”hola”;
}
Error: no se puede asignar toda la cadena de
una vez (excepto en la inicialización)
Ing. Informática
Programación I
Bloque 5-II
Ejemplo
main()
{
char cadena1[5]=”hola”;
char cadena2[5]=”ab”;
if (cadena1==cadena2)
...
}
Error: no se puede comparar toda la cadena
de una vez
Ing. Informática
Programación I
Bloque 5-II
Librería string.h
ƒ
Contiene una serie de funciones que
permiten tratar las cadenas enteras
Función
Explicación
strlen(cadena)
Retorna la longitud de la cadena
strcpy(cadena1,cadena2)
Copia el contenido de la cadena2 a la cadena1
strncpy(cadena1,cadena2,n)
Copia los n primeros caracteres de la cadena2 a la
cadena1
strcat(cadena1,cadena2)
Concatena cadena2 al final de cadena1
strncat(cadena1,cadena2,n)
Concatena los n primeros caracteres de cadena2 al
final de cadena1
strcmp(cadena1,cadena2)
Compara las dos cadenas y retorna 0 si son iguales,
un entero <0 si cadena1 es alfabéticamente menor
que cadena2, y un entero >0 si no
strncmp(cadena1,cadena2,n)
Igual que strcmp, pero utilizando sólo los n
primeros caracteres de las dos cadenas
Ing. Informática
Programación I
Leer y escribir cadenas
ƒ
Leer:
ƒ
gets(cadena);
ƒ
ƒ
Introduce los caracteres leídos en la variable
cadena, hasta que llega al '\n'
scanf("%s", cadena);
ƒ
ƒ
Se para al llegar al '\n', y también al llegar a un
espacio en blanco
Escribir
ƒ
ƒ
No hay &
printf("%s", cadena);
puts(cadena);
Bloque 5-II
Ing. Informática
#include <string.h>
#include <stdio.h>
main()
{
char a[5],b[5],c[5];
Programación I
Ejemplo
strcpy(a,"ab");
strcpy(b,"cd");
strcpy(c,a);
strcat(c,b);
a[2]='c';
a[3]='d';
printf("%s\n",c);
if (strcmp(a,c))
printf("diferentes\n");
else
printf("iguales\n");
}
Escribe “diferentes”
Bloque 5-II
Ing. Informática
#include <string.h>
#include <stdio.h>
main()
{
char a[5],b[5],c[5];
Programación I
Ejemplo
strcpy(a,"ab");
strcpy(b,"cd");
strcpy(c,a);
strcat(c,b);
a[2]='c';
a[3]='d';
a[4]='\0';
printf("%s\n",c);
if (strcmp(a,c))
printf("diferentes\n");
else
printf("iguales\n");
}
Escribe “iguales”
Bloque 5-II
Ing. Informática
Programación I
Bloque 5-II
Ejemplo: contar las ocurrencias
#include <stdio.h>de una letra en una frase
#include <string.h>
#define MAXLIN 100
main()
{
char frase[MAXLIN], letra;
int total = 0, indice;
printf("\nFrase: ");
gets(frase);
printf("\nLetra: ");
scanf("%c",&letra);
for (indice=0; indice<strlen(frase); indice++)
if (frase[indice]==letra)
total++;
printf("\nLa letra %c aparece %d veces en la frase %s", letra,
total, frase);
}
Ing. Informática
Programación I
Bloque 5-II
Ejemplo: contar las ocurrencias
de una palabra en una frase
#include <stdio.h>
#include <string.h>
#define MAXLIN 100
main()
{
char palabra_frase[MAXLIN], palabra[MAXLIN];
char c = ' ';
int total = 0;
printf("\nPalabra: ");
scanf("%s",palabra);
printf("\nFrase: ");
while (c!='\n')
{
scanf("%s%c",palabra_frase, &c);
if (strcmp(palabra_frase, palabra)==0)
total++;
}
printf("\nLa palabra %s aparece %d veces en la frase\n", palabra, total);
}
Ing. Informática
Programación I
Bloque 5-II
Estructuras (o registros)
Permiten agrupar en una variable
elementos de tipos diferentes (campos)
ƒ Ejemplos:
struct {
ƒ
campos
struct {
short int R;
int codigo;
short int G;
char tipo_usuario;
short int B;
} color;
} usuario;
struct {
Nombre de la variable
char companyia[2];
int numero;
} codigo_vuelo;
Ing. Informática
Programación I
Bloque 5-II
Acceso a los campos
ƒ
nombre_estructura.nombre_campo
ƒ
Por ejemplo:
ƒ
ƒ
ƒ
color.R=255;
color.G=0;
color.B=100;
Ing. Informática
Programación I
Bloque 5-II
Ejemplo de arrays de estructuras
struct {
short int R;
short int G;
short int B;
} colores[10];
Declara un array de 10 posiciones (0 a 9),
donde cada posición contiene una estructura
con tres campos (R, G y B)
colores[5].R=0;
colores[5].G=0;
colores[5].B=255;
Pone el color azul (0,0,255) en la posición 5
Descargar