Logo Studenta

05_Cadenas de Caracteres (completo)

¡Este material tiene más páginas!

Vista previa del material en texto

Cadenas de 
Caracteres 
Cadena de caracteres 
 En C una cadena es un vector de 
caracteres que termina con el carácter 
nulo ( '\0' ). 
 El valor de la cadena es la dirección de su 
primer carácter. 
 Por lo tanto, es apropiado decir que una 
cadena es un puntero (al 1er. elemento). 
 
Cadena de caracteres 
 Una cadena puede recibir valor en su 
declaración, ya sea un vector o una 
variable del tipo char * 
 
 
Crea el vector color de 5 elementos. 
Sus elementos son los caracteres 
'R', 'o', 'j', 'o', '\0'. 
Cadena de caracteres 
 Una cadena puede recibir valor en su 
declaración, ya sea un vector o una 
variable del tipo char * 
 
 
También podía declararse así: 
Char color [ ] = { 'R', 'o', 'j', 'o', '\0' } ; 
Cadena de caracteres 
 Una cadena puede recibir valor en su 
declaración, ya sea un vector o una 
variable del tipo char * 
 
 
Crea el puntero PtrColor que señala a la 
cadena 'Rojo‘ en alguna parte de la 
memoria. 
Cadena de caracteres 
 Una cadena puede ser asignada a un 
vector utilizando scanf. 
 Ejemplo 
La cadena escrita por el usuario se 
almacena en el vector de caracteres 
palabra[20]. Note que no se requiere & 
Cadena de caracteres 
 Una cadena puede ser asignada a un 
vector utilizando scanf. 
 Ejemplo 
 
 
 La función scanf leerá caracteres hasta 
encontrar un espacio, una nueva línea o 
un indicador de fin de archivo. 
Qué pasa si se 
ingresan más de 
19 caracteres? 
Manejo de caracteres 
Prototipo Descripción de la función 
int isdigit(int c) Regresa un valor verdadero si c es un 
dígito y 0 (falso) si no. 
int isalpha(int c) Si c es una letra devuelve verdadero 
y 0 si no. 
int isalnum(int c) Si c es un dígito o una letra devuelve 
verdadero y 0 si no. 
int ispunct(int c) Devuelve verdadero si c es un 
carácter de impresión distinto de un 
espacio, un dígito o una letra y 0 si no 
<ctype.h> 
Prototipo Descripción de la función 
int islower(int c) Regresa un valor verdadero si c es 
una letra minúscula y 0 (falso) si no. 
int isupper(int c) Regresa un valor verdadero si c es 
una letra mayúscula y 0 (falso) si no. 
int tolower(int c) Si c es una letra mayúscula, la 
retorna en minúscula; sino retorna el 
argumento sin modificación. 
int toupper(int c) Si c es una letra minúscula, la retorna 
en mayúscula; sino retorna el 
argumento sin modificación. 
Ver otras en <ctype.h> 
<ctype.h> 
Manejo de caracteres 
Funciones de conversión 
 La librería <stdlib.h> contiene funciones 
muy útiles para convertir cadenas con 
caracteres numéricos en sus 
correspondientes valores. 
 
 atof – atoi – atol 
 strtod - strtol - strtoul 
<stdlib.h> 
Función atof 
 Sintaxis 
 
 Convierte una cadena de caracteres en 
un número en punto flotante. 
 Si la conversión falla, el comportamiento 
de la función es indefinido. 
double atof ( const char * nPtr ) 
05_FuncionesDeConversion.c 
<stdlib.h> 
Función atoi 
 Sintaxis 
 
 Convierte una cadena de caracteres en 
un número entero. 
 Si la conversión falla, el comportamiento 
de la función es indefinido. 
int atoi ( const char * nPtr ) 
05_FuncionesDeConversion.c 
<stdlib.h> 
Función atol 
 Sintaxis 
 
 Convierte una cadena de caracteres en 
un long int. 
 Si la conversión falla, el comportamiento 
de la función es indefinido. 
long atol ( const char * nPtr ) 
05_FuncionesDeConversion.c 
<stdlib.h> 
Función strtod 
 Sintaxis 
 
 
 Convierte la cadena nPtr a double. 
 El primer parámetro es la cadena a 
convertir y el segundo parámetro retorna 
la posición del primer carácter, dentro de 
la cadena original, después de la porción 
convertida 
 
 
double strtod(const char *nPtr, char **endPtr) 
<stdlib.h> 
Función strtod 
 Ejemplo Note que se pasa la 
dirección del puntero 
para poder modificarlo 
05_FuncionesDeConversion.c 
<stdlib.h> 
Función strtol 
 Sintaxis 
 
 
 
 Convierte la cadena nPtr a long. 
 Parámetros 
 Cadena a convertir. 
 Posición del primer carácter, dentro de la 
cadena original, después de la porción 
convertida. 
 Base en la que aparece el nro. dentro de la 
cadena 
 
 
long strtol(const char *nPtr, char **endPtr, 
 int base) 
<stdlib.h> 
Función strtol 
 Ejemplo La base puede ser 0 
(octal) o un número 
entre 2 y 36. 
05_FuncionesDeConversion.c 
<stdlib.h> 
Función strtoul 
 Sintaxis 
 
 
 
 Convierte la cadena nPtr a unsigned 
long. 
 Los parámetros son similares a los de la 
función strtol. 
 
 
Unsigned long strtoul(const char *nPtr, 
 char **endPtr, int base) 
<stdlib.h> 
Función strtoul 
 Ejemplo 
05_FuncionesDeConversion.c 
<stdlib.h> 
Funciones de E/S 
Prototipo Descripción de la función 
 
int getchar(void) 
Toma el siguiente carácter de la 
entrada estándar y lo retorna como 
un entero. 
 
char * gets(char *s) 
Introduce caracteres de la entrada 
estándar en el arreglo s hasta que 
encuentra un ‘\n’ o EOF. Agrega al 
arreglo un carácter de terminación 
NULL. 
 
int putchar (int c) 
Imprime el carácter almacenado 
en c. 
<stdio.h> 
Funciones de E/S 
Prototipo Descripción de la función 
 
int puts(const char *s) 
Imprime la cadena s seguida 
por un ‘\n’. 
 
int sprintf(char *s, 
 const char *format, …) 
Equivalente a printf, excepto 
que la salida se almacena en el 
arreglo s en vez de imprimir en 
pantalla. 
int sscanf(char *s, 
 const char * format, …) 
Equivalente a scanf excepto 
que la entrada se lee del 
arreglo s en vez de leerlo desde 
teclado. 
<stdio.h> 
05_LineaInvertida.c 
Indique si es 
equivalente a 
scanf("%s" , linea); 
Note que imprime el 
carácter 
directamente 
 
Es más simple que 
printf para imprimir 
cadenas de 
caracteres 
05_VerLinea.c 
 Note que puts agrega ‘\n’ luego de 
imprimir la cadena de caracteres. 
05_VerLinea.c 
 
05_sprintf.c 
 
05_sscanf.c 
 
parte1 debe tener lugar para 
almacenar su valor , el del 2do. 
parámetro y el carácter NULL. 
05_string1.c 
 
05_string1.c 
Qué 
imprime? 
Esta es la biblioteca string.h 
 
strncpy no necesariamente copia 
el ‘\0’. 
Si texto no contiene 9 caracteres, 
se completa con caracteres NULL. 
05_string1.c 
 
05_string1.c 
Qué 
imprime? 
Funciones 
Funciones de comparación 
Prototipo Descripción de la función 
int strcmp( 
 const char *s1, 
 const char *s2) 
Compara la cadena s1 con 
la cadena s2. Retorna 0, un 
valor negativo o un valor 
positivo si s1 es igual, menor o 
mayor que s2 
respectivamente 
int strncmp( 
 const char *s1, 
 const char *s2, 
 size_t n) 
Idem anterior pero 
comparando hasta n 
caracteres . 
<string.h> 
 
-1 
0 
23 
05_StringCMP.c 
Qué 
imprime? 
Funciones de búsqueda 
Prototipo Descripción de la función 
char *strchr( 
 const char *s, 
 int c) 
Localiza la primera instancia 
del carácter c en la cadena s. 
Si la encuentra retorna un 
puntero a c; si no, devuelve 
NULL. 
<string.h> 
 Ejemplo 
0028FF07 
00000000 
 
05_Funcionstrchr.c 
Funciones de búsqueda 
Prototipo Descripción de la función 
char * strrchr( 
 const char *s, 
 int c) 
Localiza la última instancia de c 
en la cadena s. Si encuentra c, 
regresa un puntero a c en la 
cadena s. De lo contrario retorna 
NULL. 
<string.h> 
 Ejemplo Imprime 
16 
Funciones de búsqueda 
Prototipo Descripción de la función 
size_t strcspn( 
 const char *s1, 
 const char *s2) 
Determina y regresa la longitud 
del segmento inicial de la 
cadena s1 formado por 
caracteres no contenidos en la 
cadena s2. 
size_t strspn( 
 const char *s1, 
 const char *s2) 
 
Determina y regresa la longitud 
del segmento inicial de la 
cadena s1 que consiste sólo de 
los caracteres contenidos en la 
cadena s2. 
<string.h> 
 
4 
7 
05_String2.cFunciones de búsqueda 
Prototipo Descripción de la función 
char * strpbkr( 
 const char *s1, 
 const char *s2) 
Localiza la primera ocurrencia en la 
cadena s1 de cualquier carácter 
de la cadena s2. Si encuentra un 
carácter de s2, regresa un puntero 
a dicho carácter en s1; sino retorna 
NULL. 
<string.h> 
 Ejemplo 
2 
Funciones de búsqueda 
Prototipo Descripción de la función 
char * strstr( 
 const char *s1, 
 const char *s2) 
Localiza la primera ocurrencia en la 
cadena s1 de la cadena s2. Si la 
cadena es hallada, retorna un 
puntero a la cadena en s1; sino 
retorna NULL. 
<string.h> 
 Ejemplo 
4 
Manipulación de cadenas 
Prototipo Descripción de la función 
char * strtok( 
 const char *s1, 
 const char *s2) 
 
Llamadas sucesivas a strtok divide 
la cadena s1 en tokens (partes 
lógicas, como palabras, en una 
línea de texto) separados por 
caracteres contenidos en la 
cadena s2. La 1ra.llamada tiene 
a s1 como 1er. argumento y las 
siguientes NULL. Para c/llamada 
regresa un puntero al token 
actual. Si no quedan más tokens 
retorna NULL. 
<string.h> 
 
05_Funcionstrtok.c 
La 1ra. llamada 
se hace con el 
string 
Las siguientes 
tienen NULL 
como 1er. 
argumento Estos caracteres 
separan los tokens 
Salida del ejemplo anterior 
 
05_Funcionstrtok.c 
Manejo de cadenas 
Prototipo Descripción de la función 
char * strerror( 
 int errornum) 
Utiliza errornum para contruir 
una cadena de texto completa. 
La forma de dicha cadena es 
dependiente del sistema. 
Regresa un puntero a la cadena 
<string.h> 
 Ejemplo 
Manejo de cadenas 
Prototipo Descripción de la función 
size_t strlen( 
 const char * s) 
Retorna la cantidad de 
caracteres que anteceden al 
carácter de terminación NULL. 
<string.h> 
Funciones de memoria 
<string.h> 
Prototipo Descripción de la función 
void * memcpy( 
 void *s1, 
 const void *s2, 
 size_t n) 
Copia n caracteres del 
objeto apuntado por s2 al 
objeto apuntado por s1. 
Regresa un puntero al 
objeto resultante. 
 La función puede recibir un puntero a cualquier 
tipo de objeto. 
 Si los dos objetos se superponen (son parte del 
mismo objeto) el resultado de la función queda 
indefinido. 
 
05_memcpy.c 
Funciones de memoria 
<string.h> 
Prototipo Descripción de la función 
void * memmove( 
 void *s1, 
 const void *s2, 
 size_t n) 
Es similiar a memcpy pero la 
copia se ejecuta pasando 
los bytes de s2 a un arreglo 
temporal y luego del arreglo 
temporal a s1. 
 La copia se lleva a cabo como si 1ro. los bytes fueran 
copiados del 2do. argumento a un arreglo temporal y 
a continuación copiados de dicho arreglo al 1er. 
argumento. 
 Esto permite copiar elementos dentro de una misma 
cadena. 
05_memmove.c 
Funciones de memoria 
Prototipo Descripción de la función 
char * memcmp( 
 const void *s1, 
 const void *s2, 
 size_t n) 
Compara los primero n 
caracteres de los objetos 
apuntados por s1 y s2. La 
función retorna 0, menos que 0 o 
más que 0 si s1 es igual, menor o 
mayor que s2, respectivamente. 
<string.h> 
 0 
-1 
 1 
Funciones de memoria 
Prototipo Descripción de la función 
char * memchr( 
 const void *s, 
 int c, size_t n) 
Localiza la 1ra.instancia de c 
(convertida a unsigned char) 
en los 1ros. n caracteres del 
objeto señalado por s. Si c es 
encontrado, regresa un 
puntero a c en el objeto. De lo 
contrario retorna NULL. 
<string.h> 
 
05_memchr.c 
Funciones de memoria 
Prototipo Descripción de la función 
char * memset( 
 void *s, int c, 
 size_t n) 
Copia c (convertida a unsigned 
char) en los 1ros. n caracteres 
del objeto señalado por s. 
Regresa un puntero al resultado. 
 zzzzzzzjemplo 
 Ejemplo 
05_memset.c

Otros materiales