Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Clase 9
1. Funciones II y
Cadena de
Caracteres
Nilton A. Garcia
CIENCIAS DE LA Hilares
COMPUTACIÓN I
Introducción
Funciones II
Funciones II y Cadena de Recursividad
Funciones con arreglos
Caracteres Caracteres y Cadenas
Fundamentos
Cctype
Utilizando Code::Blocks Cstdlib
Cstring
23 de noviembre de 2011
Lic. Nilton Alan García Hilares
Universidad Mayor de San Marcos
2.1
2. Funciones II y
Contenido Cadena de
Caracteres
Nilton A. Garcia
Hilares
Introducción
Funciones II Introducción
Recursividad Funciones II
Recursividad
Funciones con arreglos Funciones con arreglos
Caracteres y Cadenas
Fundamentos
Cctype
Cstdlib
Caracteres y Cadenas Cstring
Fundamentos
Cctype
Cstdlib
Cstring
2.2
3. Funciones II y
Objetivos Cadena de
Caracteres
Nilton A. Garcia
Hilares
Introducción
1 Comprender el concepto de recursividad. Funciones II
2 Extender el uso de funciones relacionadas con arreglos. Recursividad
Funciones con arreglos
3 Conocer las diversas librerías para trabajar con caracteres Caracteres y Cadenas
Fundamentos
y cadenas. Cctype
Cstdlib
Cstring
2.3
4. Funciones II y
Recursividad Cadena de
Caracteres
Nilton A. Garcia
Hilares
Los programas que ya se han visto están organizados en
general como funciones que llaman unas a otras, en forma
jerárquica y disciplinada. Para algunos tipos de problemas es
útil tener que se llamen a sí mismas. Una función recursiva es
una función que se llama a si misma ya sea directa o Introducción
indirectamente a través de otra función. Funciones II
Recursividad
Funciones con arreglos
Ejemplo Caracteres y Cadenas
La función factorial puede definirse de forma recursiva: Fundamentos
Cctype
Cstdlib
Cstring
int factorial (int N){
int R;
if (N==0 || N==1) R=1;
else R=N*factorial(N-1);
return N;
}
2.4
5. Funciones II y
Recursividad Cadena de
Caracteres
Nilton A. Garcia
Hilares
Los programas que ya se han visto están organizados en
general como funciones que llaman unas a otras, en forma
jerárquica y disciplinada. Para algunos tipos de problemas es
útil tener que se llamen a sí mismas. Una función recursiva es
una función que se llama a si misma ya sea directa o Introducción
indirectamente a través de otra función. Funciones II
Recursividad
Funciones con arreglos
Ejemplo Caracteres y Cadenas
La función factorial puede definirse de forma recursiva: Fundamentos
Cctype
Cstdlib
Cstring
int factorial (int N){
int R;
if (N==0 || N==1) R=1;
else R=N*factorial(N-1);
return N;
}
2.4
6. Funciones II y
Llamadas recursivas Cadena de
Caracteres
Nilton A. Garcia
Hilares
Ejemplo
Si se ejecuta la función factorial(5), definida anteriormente , ten-
dremos:
Introducción
Funciones II
Recursividad
Funciones con arreglos
Caracteres y Cadenas
Fundamentos
Cctype
Cstdlib
Cstring
2.5
7. Funciones II y
Recursividad vs Iteración Cadena de
Caracteres
Nilton A. Garcia
Hilares
Cualquier problema que puede ser resuelto en forma
recursiva también puede ser resuelto de forma iterativa.
Normalmente se escoge un enfoque recursivo en
preferencia a uno iterativo, cuando el enfoque recursivo es
más natural al problema y resulta en el programador más
Introducción
fácil de comprender y depurar. Otra razón para
Funciones II
seleccionar un enfoque recursivo es que la solución Recursividad
iterativa pudiera no resultar aparente. Funciones con arreglos
Caracteres y Cadenas
Evite el uso de recursividad cuando se requiera Fundamentos
Cctype
rendimiento. Las llamadas recursivas toman tiempo y Cstdlib
Cstring
requieren memoria adicional.
Un programa muy funcionalizado en comparación con uno
monolítico (es decir, de una sola pieza, sin funciones)
hace grandes cantidades de llamadas de función y estas
consumen memoria y tiempo de ejecución en el
procesador. Pero los programas monolíticos son difíciles
de programar, de mantener, depurar y modificar.
2.6
8. Funciones II y
Recursividad vs Iteración Cadena de
Caracteres
Nilton A. Garcia
Hilares
Cualquier problema que puede ser resuelto en forma
recursiva también puede ser resuelto de forma iterativa.
Normalmente se escoge un enfoque recursivo en
preferencia a uno iterativo, cuando el enfoque recursivo es
más natural al problema y resulta en el programador más
Introducción
fácil de comprender y depurar. Otra razón para
Funciones II
seleccionar un enfoque recursivo es que la solución Recursividad
iterativa pudiera no resultar aparente. Funciones con arreglos
Caracteres y Cadenas
Evite el uso de recursividad cuando se requiera Fundamentos
Cctype
rendimiento. Las llamadas recursivas toman tiempo y Cstdlib
Cstring
requieren memoria adicional.
Un programa muy funcionalizado en comparación con uno
monolítico (es decir, de una sola pieza, sin funciones)
hace grandes cantidades de llamadas de función y estas
consumen memoria y tiempo de ejecución en el
procesador. Pero los programas monolíticos son difíciles
de programar, de mantener, depurar y modificar.
2.6
9. Funciones II y
Recursividad vs Iteración Cadena de
Caracteres
Nilton A. Garcia
Hilares
Cualquier problema que puede ser resuelto en forma
recursiva también puede ser resuelto de forma iterativa.
Normalmente se escoge un enfoque recursivo en
preferencia a uno iterativo, cuando el enfoque recursivo es
más natural al problema y resulta en el programador más
Introducción
fácil de comprender y depurar. Otra razón para
Funciones II
seleccionar un enfoque recursivo es que la solución Recursividad
iterativa pudiera no resultar aparente. Funciones con arreglos
Caracteres y Cadenas
Evite el uso de recursividad cuando se requiera Fundamentos
Cctype
rendimiento. Las llamadas recursivas toman tiempo y Cstdlib
Cstring
requieren memoria adicional.
Un programa muy funcionalizado en comparación con uno
monolítico (es decir, de una sola pieza, sin funciones)
hace grandes cantidades de llamadas de función y estas
consumen memoria y tiempo de ejecución en el
procesador. Pero los programas monolíticos son difíciles
de programar, de mantener, depurar y modificar.
2.6
10. Funciones II y
Funciones con arreglos Cadena de
Caracteres
1 Declaración: una función que recibe un arreglo como Nilton A. Garcia
Hilares
argumento se declara de manera habitual, especificando
el argumento que será el arreglo.
2 Llamada: para pasar un arreglo como argumento de una
funcione, especifique el nombre del arreglo sin corchetes.
Introducción
Ejemplo Funciones II
Recursividad
// prototipo: Funciones con arreglos
Caracteres y Cadenas
//void Funcion(int A[10]); Fundamentos
Cctype
Cstdlib
int Vector[10]; Cstring
// llamada :
Funcion(Vector);
Cuando se trabaja con arreglos como argumentos, es
necesario tener el tamaño del mismo para poder efectuar los
procedimientos necesarios sobre el mismo, por lo que el
tamaño del arreglo también suele se r pasado como
argumento. 2.7
11. Funciones II y
Funciones con arreglos Cadena de
Caracteres
1 Declaración: una función que recibe un arreglo como Nilton A. Garcia
Hilares
argumento se declara de manera habitual, especificando
el argumento que será el arreglo.
2 Llamada: para pasar un arreglo como argumento de una
funcione, especifique el nombre del arreglo sin corchetes.
Introducción
Ejemplo Funciones II
Recursividad
// prototipo: Funciones con arreglos
Caracteres y Cadenas
//void Funcion(int A[10]); Fundamentos
Cctype
Cstdlib
int Vector[10]; Cstring
// llamada :
Funcion(Vector);
Cuando se trabaja con arreglos como argumentos, es
necesario tener el tamaño del mismo para poder efectuar los
procedimientos necesarios sobre el mismo, por lo que el
tamaño del arreglo también suele se r pasado como
argumento. 2.7
12. Funciones II y
Funciones con arreglos Cadena de
Caracteres
1 Declaración: una función que recibe un arreglo como Nilton A. Garcia
Hilares
argumento se declara de manera habitual, especificando
el argumento que será el arreglo.
2 Llamada: para pasar un arreglo como argumento de una
funcione, especifique el nombre del arreglo sin corchetes.
Introducción
Ejemplo Funciones II
Recursividad
// prototipo: Funciones con arreglos
Caracteres y Cadenas
//void Funcion(int A[10]); Fundamentos
Cctype
Cstdlib
int Vector[10]; Cstring
// llamada :
Funcion(Vector);
Cuando se trabaja con arreglos como argumentos, es
necesario tener el tamaño del mismo para poder efectuar los
procedimientos necesarios sobre el mismo, por lo que el
tamaño del arreglo también suele se r pasado como
argumento. 2.7
13. Funciones II y
Cadenas y Caracteres Cadena de
Caracteres
Nilton A. Garcia
Hilares
Un carácter es el tipo básico alfanumérico, es decir que puede
contener un carácter, un dígito numérico o un signo de
puntuación. En C/C++ son representados mediante el tipo de
dato char. Los tipos de dato char también son tratados como
Introducción
un tipo de dato numérico entero lo cual nos permite usar
Funciones II
variables char para trabajar con valores pequeños, siempre Recursividad
que lo consideremos necesario, esta una correspondencia Funciones con arreglos
Caracteres y Cadenas
entre números y caracteres recibe el nombre de código ASCII. Fundamentos
Cctype
Cstdlib
Una cadena en C/C++ es un arreglo de caracteres, o valores Cstring
de tipo char, terminados con el carácter nulo, es decir el valor
numérico 0. Internamente, en el ordenador, se almacenan en
posiciones consecutivas de memoria. Este tipo de estructuras
recibe un tratamiento muy especial, ya que es de gran utilidad
y su uso es continuo.
2.8
14. Funciones II y
Cadenas y Caracteres Cadena de
Caracteres
Nilton A. Garcia
Hilares
Un carácter es el tipo básico alfanumérico, es decir que puede
contener un carácter, un dígito numérico o un signo de
puntuación. En C/C++ son representados mediante el tipo de
dato char. Los tipos de dato char también son tratados como
Introducción
un tipo de dato numérico entero lo cual nos permite usar
Funciones II
variables char para trabajar con valores pequeños, siempre Recursividad
que lo consideremos necesario, esta una correspondencia Funciones con arreglos
Caracteres y Cadenas
entre números y caracteres recibe el nombre de código ASCII. Fundamentos
Cctype
Cstdlib
Una cadena en C/C++ es un arreglo de caracteres, o valores Cstring
de tipo char, terminados con el carácter nulo, es decir el valor
numérico 0. Internamente, en el ordenador, se almacenan en
posiciones consecutivas de memoria. Este tipo de estructuras
recibe un tratamiento muy especial, ya que es de gran utilidad
y su uso es continuo.
2.8
15. Funciones II y
Cadenas y Caracteres Cadena de
Caracteres
Nilton A. Garcia
Hilares
Ejemplo
// Char:
char Letra = ‘a’; Introducción
Funciones II
// Cadena: Recursividad
Funciones con arreglos
char Palabra[] = “HOLA”; Caracteres y Cadenas
char Cadena[4]; Fundamentos
Cctype
Cadena[0]=‘C’; Cstdlib
Cstring
Cadena[1]=‘A’;
Cadena[2]=‘S’;
Cadena[3]=‘A’;
2.9
16. Funciones II y
Biblioteca de manejo de caracteres Cadena de
Caracteres
Nilton A. Garcia
Hilares
Incluye varias funciones que ejecutan pruebas útiles y
manipulaciones de datos tipo carácter. Cada función recibe un
carácter presentado como un int o un EOF como argumento.
Introducción
Cabecera Funciones II
Recursividad
Para utilizar la librería de funciones de caracteres se debe Funciones con arreglos
incluir la cabecera: Caracteres y Cadenas
Fundamentos
Cctype
Cstdlib
# incluce <cctype> Cstring
Las funciones más importantes en esta librería, son las que
nos permiten determinar la naturaleza del argumento, ya sea
de tipo numérico, alfabético, alfanumérico, hexadecimal, etc.
2.10
17. Funciones II y
Biblioteca de manejo de caracteres Cadena de
Caracteres
Nilton A. Garcia
Hilares
Incluye varias funciones que ejecutan pruebas útiles y
manipulaciones de datos tipo carácter. Cada función recibe un
carácter presentado como un int o un EOF como argumento.
Introducción
Cabecera Funciones II
Recursividad
Para utilizar la librería de funciones de caracteres se debe Funciones con arreglos
incluir la cabecera: Caracteres y Cadenas
Fundamentos
Cctype
Cstdlib
# incluce <cctype> Cstring
Las funciones más importantes en esta librería, son las que
nos permiten determinar la naturaleza del argumento, ya sea
de tipo numérico, alfabético, alfanumérico, hexadecimal, etc.
2.10
18. Funciones II y
Biblioteca de manejo de caracteres Cadena de
Caracteres
Nilton A. Garcia
Hilares
Incluye varias funciones que ejecutan pruebas útiles y
manipulaciones de datos tipo carácter. Cada función recibe un
carácter presentado como un int o un EOF como argumento.
Introducción
Cabecera Funciones II
Recursividad
Para utilizar la librería de funciones de caracteres se debe Funciones con arreglos
incluir la cabecera: Caracteres y Cadenas
Fundamentos
Cctype
Cstdlib
# incluce <cctype> Cstring
Las funciones más importantes en esta librería, son las que
nos permiten determinar la naturaleza del argumento, ya sea
de tipo numérico, alfabético, alfanumérico, hexadecimal, etc.
2.10
19. Funciones II y
Funciones Ctype Cadena de
Caracteres
Nilton A. Garcia
Hilares
prototipo descripcion
int isdigit(int c) Evalúa si c es un digito (V/F)
int isalpha(int c) Evalúa si c es un a letra (V/F) Introducción
int isalnum(int c) Evalúa si c es una letra o digito (V/F) Funciones II
Recursividad
int islower(int c) Evalúa si c es una letra minúscula (V/F) Funciones con arreglos
int isupper(int c) Evalúa si c es una letra mayúscula (V/F) Caracteres y Cadenas
Fundamentos
Evalúa si c es un espacio en blanco,) Cctype
int isspace(int c) Cstdlib
tabulador o salto de linea (V/F) Cstring
int tolower(int c) Regresa la minúscula de c (V/F)
int toupper(int c) Regresa la mayúscula de c (V/F)
2.11
20. Funciones II y
Funciones de conversión de cadenas Cadena de
Caracteres
Nilton A. Garcia
En esta sección presentaremos funciones de conversión de Hilares
cadenas de caracteres correspondientes a la librería general
de utilerías Cstdlib. Estas funciones convierten cadenas de
dígitos enteros y de punto flotante.
Prototipo Descripción Introducción
double atof(const char *nPtr) convierte nPtr a double Funciones II
int atoi(const char *nPtr) convierte nPtr a int Recursividad
Funciones con arreglos
long atol(const char *nPtr) convierte nPtr a long int Caracteres y Cadenas
Fundamentos
Cctype
Nótese que se utiliza const para la declaración de la variable, Cstdlib
ya que nPtr es un apuntador a constante de carácter (const Cstring
char), const declara que el valor del argumento no será
modificado.
Ejemplo
char Numero[]=“159”;
int N;
N = atoi(Numero);
2.12
21. Funciones II y
Funciones de conversión de cadenas Cadena de
Caracteres
Nilton A. Garcia
En esta sección presentaremos funciones de conversión de Hilares
cadenas de caracteres correspondientes a la librería general
de utilerías Cstdlib. Estas funciones convierten cadenas de
dígitos enteros y de punto flotante.
Prototipo Descripción Introducción
double atof(const char *nPtr) convierte nPtr a double Funciones II
int atoi(const char *nPtr) convierte nPtr a int Recursividad
Funciones con arreglos
long atol(const char *nPtr) convierte nPtr a long int Caracteres y Cadenas
Fundamentos
Cctype
Nótese que se utiliza const para la declaración de la variable, Cstdlib
ya que nPtr es un apuntador a constante de carácter (const Cstring
char), const declara que el valor del argumento no será
modificado.
Ejemplo
char Numero[]=“159”;
int N;
N = atoi(Numero);
2.12
22. Funciones II y
Funciones de conversión de cadenas Cadena de
Caracteres
Nilton A. Garcia
En esta sección presentaremos funciones de conversión de Hilares
cadenas de caracteres correspondientes a la librería general
de utilerías Cstdlib. Estas funciones convierten cadenas de
dígitos enteros y de punto flotante.
Prototipo Descripción Introducción
double atof(const char *nPtr) convierte nPtr a double Funciones II
int atoi(const char *nPtr) convierte nPtr a int Recursividad
Funciones con arreglos
long atol(const char *nPtr) convierte nPtr a long int Caracteres y Cadenas
Fundamentos
Cctype
Nótese que se utiliza const para la declaración de la variable, Cstdlib
ya que nPtr es un apuntador a constante de carácter (const Cstring
char), const declara que el valor del argumento no será
modificado.
Ejemplo
char Numero[]=“159”;
int N;
N = atoi(Numero);
2.12
23. Funciones II y
Librería de manejo de cadenas Cadena de
Caracteres
Nilton A. Garcia
Hilares
la librería de manejo de cadenas proporciona muchas
funciones útiles para manipular datos de cadenas, comparar
cadenas, buscar en cadenas de caracteres y otras cadenas,
dividir cadenas y determinar la longitud de las mismas.
Introducción
Funciones II
Cabecera Recursividad
Funciones con arreglos
Para utilizar la librería de manejo de cadena se debe incluir la Caracteres y Cadenas
cabecera: Fundamentos
Cctype
Cstdlib
Cstring
# incluce <cstring>
Las funciones más importantes de esta librería son: strcpy,
strncpy, strcat, strncat, strncmp, strncmp, strchr, strrchr, strstr,
strlen.
2.13
24. Funciones II y
Librería de manejo de cadenas Cadena de
Caracteres
Nilton A. Garcia
Hilares
la librería de manejo de cadenas proporciona muchas
funciones útiles para manipular datos de cadenas, comparar
cadenas, buscar en cadenas de caracteres y otras cadenas,
dividir cadenas y determinar la longitud de las mismas.
Introducción
Funciones II
Cabecera Recursividad
Funciones con arreglos
Para utilizar la librería de manejo de cadena se debe incluir la Caracteres y Cadenas
cabecera: Fundamentos
Cctype
Cstdlib
Cstring
# incluce <cstring>
Las funciones más importantes de esta librería son: strcpy,
strncpy, strcat, strncat, strncmp, strncmp, strchr, strrchr, strstr,
strlen.
2.13
25. Funciones II y
Librería de manejo de cadenas Cadena de
Caracteres
Nilton A. Garcia
Hilares
la librería de manejo de cadenas proporciona muchas
funciones útiles para manipular datos de cadenas, comparar
cadenas, buscar en cadenas de caracteres y otras cadenas,
dividir cadenas y determinar la longitud de las mismas.
Introducción
Funciones II
Cabecera Recursividad
Funciones con arreglos
Para utilizar la librería de manejo de cadena se debe incluir la Caracteres y Cadenas
cabecera: Fundamentos
Cctype
Cstdlib
Cstring
# incluce <cstring>
Las funciones más importantes de esta librería son: strcpy,
strncpy, strcat, strncat, strncmp, strncmp, strchr, strrchr, strstr,
strlen.
2.13
26. Funciones II y
Funciones de manipulacion de cadenas Cadena de
Caracteres
Nilton A. Garcia
Hilares
Prototipo / Descripción
size_t strlen(const char *s)
Determina la longuitud de la cadena S
char *strcpy(char *s1, const char *s2)
Copia s2 a s1, regresando s1
char *strncpy(char *s1, const char *s2, size) Introducción
Copia n caracteres de s2 a s1, regresando s1 Funciones II
Recursividad
char *strcat(char *s1, const char *s2, size) Funciones con arreglos
Agrega s2 a s1, regresando s1 Caracteres y Cadenas
Fundamentos
char *strncat(char *s1, const char *s2, size) Cctype
Agrega n caracteres de s2 a s1, regresando s1 Cstdlib
Cstring
Ejemplo
char S1[20];
char S2[]=“Palabra”;
strcpy(S1,S2);
strcat(S1,S2);
2.14
27. Funciones II y
Funciones de comparacion de cadenas Cadena de
Caracteres
Nilton A. Garcia
Prototipo / Descripción Hilares
int *strcmp(const char *s1, const char *s2)
Compara s1 con s2, regresa
(0 si s1 = s2, -1 si s1<s2 y 1 si s1>s2)
Introducción
int *strncmp(const char *s1, const char *s2)
Funciones II
Compara n caracteres de s1 con s2, regresa Recursividad
(0 si s1 = s2, -1 si s1<s2 y 1 si s1>s2) Funciones con arreglos
Caracteres y Cadenas
Fundamentos
Cctype
Cstdlib
Ejemplo Cstring
char S1[]=“Hola mundo”;
char S2[]=“Hola mundo”;
char S3[]=“Hola planeta”;
strcmp(S1,S2); // retorna 0
strcat(S1,S3); // retorna -1
strncmp(S1,S3,4); // retorna 0
strncmp(S1,S3,6); // retorna -1
2.15
28. Funciones II y
Funciones de busqueda de cadenas Cadena de
Caracteres
Nilton A. Garcia
Prototipo / Descripción Hilares
char *strchr(const char *s, int c)
Localiza la primera instancia del caracter c en s
si lo localiza devuelve un apuntador a c,
si no un apuntador NULL
char *strrchr(const char *s, int c)
Introducción
Localiza la ultima instancia del caracter c en s
si lo localiza devuelve un apuntador a c, Funciones II
Recursividad
si no un apuntador NULL Funciones con arreglos
char *strstr(const char *s1, const char *s2) Caracteres y Cadenas
Localiza la primera ocurrencia de s2 en s1 Fundamentos
si lo localiza devuelve un apuntador a la cadena en s1, Cctype
Cstdlib
si no un apuntador NULL Cstring
Ejemplo
char S1[]=“Hola mundooo!”;
char S2[]=“mu”;
char C = ‘o”;
strchr(S1,C); // retorna “ola mundooo!”
strrchr(S1,C); // retorna “o!”
strstr(S1,S2); // retorna “mundooo!”
2.16