Diapositiva 1

Anuncio
CADENAS DE
CARACTERES
Lenguajes de programación LPSI EUI UPM
•
•
•
•
Arrays unidimensionales de caracteres
‘\0’ es el carácter nulo
Toda cadena debe acabar en ‘\0’
Lo que hay después de ‘\0’ en el array no
se considera parte de la cadena
• Las cadenas constantes van entre “ ”
“¡Venga ya!”
’¡’
‘V’
‘e‘
‘n’
‘g’
’a’
‘‘
‘y’
‘a’
‘!’
‘\0’
Lenguajes de programación LPSI EUI UPM
char nombre [25] = {‘B’,’u’,’z’,’z’,’
‘,’L’,’i’,’g’,’h’,’t’,’y’,’e’,’a’,’r’,’\0’};
char edif [ ] = “casamata”;
char no_se [15] = “”, desc[20] = “subproducto”;
char trampa [12] = “vacío”;
char *color = “amarillo”;
Lenguajes de programación LPSI EUI UPM
char titulo [40] = “Una notte a Napoli”;
char c = ‘Ñ’, *p = titulo;
char *grupo = “Pink Martini”
titulo[1] = c;
*(p+1) = ‘n’;
grupo [6] = ‘T’;
grupo = &c;
*grupo = ‘x’;
¡ERROR!
Lenguajes de programación LPSI EUI UPM
main ()
{ char cadena [15] = “Trabuco”, *p = cadena;
for (; *p; p++)
printf (“%s”, p);
}
Lenguajes de programación LPSI EUI UPM
main ()
{ char semana [7][[10] = {“lunes”, “martes”,
“miércoles”, “jueves”, “viernes”,
“sábado”, “domingo”}, dia, *p;
for (dia = 0; dia < 7; dia++)
{ printf (“%s\n”, semana[dia]);
p = semana + dia;
printf (“%s\n”, p);
}
Lenguajes de programación LPSI EUI UPM
MANEJO DE MEMORIA – string.h
void * memcpy (void *s1, const void *s2, unsigned n)
• Copia n bytes de s2 en s1
• Devuelve s1
void * memmove (void *s1, const void *s2, unsigned n)
• Copia n bytes desde s2 a s1
• Devuelve s1
• Usa una zona auxiliar para la copia
Lenguajes de programación LPSI EUI UPM
MANEJO DE MEMORIA – string.h
int memcmp (const void *s1, const void *s2,
unsigned n)
• Compara los n primeros caracteres de s1 y s2
• Devuelve:
– 0
si son iguales
– <0
si s1 es menor que s2
– >0
si s1 es mayor que s2
Lenguajes de programación LPSI EUI UPM
MANEJO DE MEMORIA – string.h
void * memchr (const void *s1, int c, unsigned n)
• Localiza la primera aparición del carácter c (convertido a
unsigned char) entre los primeros n caracteres de s1
• Devuelve la dirección de s1 en la que está el carácter o
NULL si no está
void * memset (void *s1, int c, unsigned n)
• Copia el carácter c (convertido a unsigned char) en los n
primeros caracteres de s1
• Devuelve s1
Lenguajes de programación LPSI EUI UPM
MANEJO DE CADENAS – string.h
char * strcpy (char *s1, const char *s2)
• Copia s2 en s1
• Devuelve s1
char * strncpy (char *s1, const char *s2, unsigned n)
• Copia n caracteres de s2 en s1
• Devuelve s1
Lenguajes de programación LPSI EUI UPM
MANEJO DE CADENAS – string.h
char * strcat (char *s1, const char *s2)
• Concatena s2 al final de s1
• El primer carácter de s2 se superpone al ‘\0’ de s1
• Devuelve s1
Lenguajes de programación LPSI EUI UPM
MANEJO DE CADENAS – string.h
char * strncat (char *s1, const char *s2)
• Concatena n caracteres de s2 al final de s1
• El primer carácter de s2 se superpone al ‘\0’ de s1
• Devuelve s1
Lenguajes de programación LPSI EUI UPM
MANEJO DE CADENAS – string.h
int strcmp (const char *s1, const char *s2)
• Compara la cadena s1 con s2
• Devuelve
– 0
si son iguales
– <0
si s1 es menor que s2
– >0
si s1 es mayor que s2
Lenguajes de programación LPSI EUI UPM
MANEJO DE CADENAS – string.h
int strncmp (const char *s1, const char *s2,
unsigned n)
• Compara un máximo de n caracteres de s1 y s2. Para si
encuentra ‘\0’ antes de los n caracteres o si se puede
determinar el resultado
• Devuelve
– 0
si son iguales
– <0
si s1 es menor que s2
– >0
si s1 es mayor que s2
Lenguajes de programación LPSI EUI UPM
MANEJO DE CADENAS – string.h
char *strchr (const char *s1, int c)
• Localiza la primera instancia del carácter c en s1
• Devuelve un puntero a c o NULL si no lo encuentra
Lenguajes de programación LPSI EUI UPM
MANEJO DE CADENAS – string.h
unsigned strlen (const char *s1)
* Devuelve la longitud de la cadena s1, sin contar el ‘\0’
Lenguajes de programación LPSI EUI UPM
MANEJO DE CADENAS – string.h
char *strstr (const char *s1, const char *s2)
• Localiza la primera aparición de la cadena s2 en la
cadena s1
• Devuelve la dirección de la cadena en s1 o NULL si no la
encuentra
char *strpbrk (const char *s1, const char *s2)
• Localiza el primer carácter de s2 que esté en s1
• Devuelve la dirección en s1 del carácter encontrado o
NULL si no encuentra ninguno
Lenguajes de programación LPSI EUI UPM
MANEJO DE CADENAS – string.h
unsigned strspn (const char *s1, const char *s2)
• Devuelve la longitud máxima de la subcadena inicial de s1
formada sólo por caracteres contenidos en s2
unsigned strcspn (const char *s1, const char *s2)
• Devuelve la longitud máxima de la subcadena inicial de s1
formada sólo por caracteres que no están contenidos en s2
char *strrchr (const char *s1, int c)
• Localiza la última instancia del carácter c en s1
• Devuelve un puntero a c o NULL si no lo encuentra
Lenguajes de programación LPSI EUI UPM
CONVERSIÓN DE CADENAS –
stdlib.h
double atof (const char *s1)
• Convierte la cadena s1 a double
int atoi (const char *s1)
• Convierte la cadena s1 a int
long atol (const char *s1)
• Convierte la cadena s1 a long
char *itoa (int n, char *s1, unsigned b)
• Convierte el entero n en una cadena de caracteres, que
la almacena en s1, en base b. La base tiene que estar en
el rango 2..36
• Devuelve s1
Lenguajes de programación LPSI EUI UPM
MANEJO DE CARACTERES – ctype.h
int isdigit (int c)
• Devuelve verdadero si c es un dígito y 0 en caso contrario
int isalpha (int c)
• Devuelve verdadero si c es una letra y 0 en caso contrario
int isalnum(int c)
• Devuelve verdadero si c es un dígito o una letra, y 0 en
caso contrario
int islower(int c)
• Devuelve verdadero si c es una letra minúscula y 0 en
caso contrario
Lenguajes de programación LPSI EUI UPM
MANEJO DE CARACTERES – ctype.h
int isupper (int c)
• Devuelve verdadero si c es una letra mayúscula y 0 en
caso contrario
int isspace (int c)
• Devuelve verdadero si c es un carácter de espaciado (salto
de línea ‘\n’, espacio en blanco ‘ ‘, línea siguiente ‘\f’,
retorno de carro ‘\r’, tabulador horizontal ‘\t’ o tabulador
vertical ‘\v’) y 0 en caso contrario
int tolower (int c)
• Si c es una letra mayúscula la convierte a minúscula, si no
la devuelve sin modificar
Lenguajes de programación LPSI EUI UPM
MANEJO DE CARACTERES – ctype.h
int toupper (int c)
• Si c es una letra minúscula la convierte a mayúscula, si
no la devuelve sin modificar
int iscntrl (int c)
• Devuelve verdadero si c es un carácter de control y 0 en
caso contrario
int ispunct (int c)
• Devuelve verdadero si c es un carácter imprimible
distinto a letra, dígito o espacio en blanco, y 0 en caso
contrario
Lenguajes de programación LPSI EUI UPM
MANEJO DE CARACTERES – ctype.h
int isprint (int c)
• Devuelve verdadero si c es un carácter imprimible y 0 en
caso contrario
int isupper (int c)
• Devuelve verdadero si c es un carácter imprimible
distinto del espacio en blanco, y 0 en caso contrario
Lenguajes de programación LPSI EUI UPM
BIBLIOTECA ESTÁNDAR DE ENTRADA/SALIDA – stdio.h
int getchar (void)
• Devuelve el siguiente carácter de la entrada estándar
(teclado normalmente) . Lo recoge después de pulsar
intro.
• Si hay un error de lectura devuelve EOF (-1)
char *gets (char s1)
• Lee caracteres de la entrada estándar hasta encontrar un
salto de línea o el fin de fichero, que no los incluye, y los
almacena en la cadena s1. Añade ‘\0’ al final.
• Devuelve s1 si no hay error en la lectura y NULL en caso
contrario
fflush (stdin) limpia el buffer de teclado
Lenguajes de programación LPSI EUI UPM
BIBLIOTECA ESTÁNDAR DE ENTRADA/SALIDA – stdio.h
int putchar (int c)
• Imprime el carácter c en la salida estándar (pantalla
normalmente)
int puts (const char * s1)
• Imprime la cadena de caracteres s1 en la salida estándar
seguida de un salto de línea. Si tiene éxito devuelve un
‘\n’ y EOF en caso contrario
int sprintf (char *s1, const char * formato, …)
* Igual que printf pero deja la salida en la cadena s1
int scanf (char *s1, const char * formato, …)
* Igual que scanf pero lee los datos de entrada de la cadena
s1 en vez de leerlos de teclado
Lenguajes de programación LPSI EUI UPM
ENTRADA/SALIDA DE CONSOLA – conio.h
(no compatible con windows)
void clrscr(void)
• Borra la pantalla y sitúa el cursor en la esquina superior
izda
int getch (void)
• Devuelve el carácter leído de teclado sin esperar a que
se pulse intro. No hace eco en la pantalla
int getche (void)
• Devuelve el carácter leído de teclado sin esperar a que
se pulse intro. Hace eco en la pantalla
int putch (int c)
• Imprime el carácter c en la pantalla. Devuelve el carácter
impreso o EOF en caso de error
Lenguajes de programación LPSI EUI UPM
EJERCICIOS
• Implementar todas las funciones
explicadas en el tema, que no pertenezcan
a stdio.h o conio.h, y que no se hayan
implementado como ejemplo.
• Implementar una función que reciba como
parámetro una cadena de caracteres y la
devuelva invertida
Lenguajes de programación LPSI EUI UPM
• Escribir una función que reciba como
parámetros dos matrículas de coche
distintas con formato “E-DDDD-LLL” y
devuelva la más antigua.
• Escribir una función que lea un nombre
y unos apellidos y los devuelva, en
mayúsculas y encriptados, en una
cadena de caracteres, de longitud
máxima 50. Para encriptar, se sumará 3
al código ascii de las vocales y 7 al de
cualquier otra letra o símbolo que
aparezca en el nombre o apellidos.
Lenguajes de programación LPSI EUI UPM
• Escribir una función que recibiendo como
parámetros un array de punteros a
cadenas de caracteres y un número
entero mayor o igual que 2, ordene el
array alfabéticamente y devuelva un
código de ejecución que será 0 si todo ha
ido bien ó 1 en caso de error.
Lenguajes de programación LPSI EUI UPM
Descargar