cadena de caracteres y arreglos

28
Funciones II y Cadena de Caracteres Nilton A. Garcia Hilares Introducción Funciones II Recursividad Funciones con arreglos Caracteres y Cadenas Fundamentos Cctype Cstdlib Cstring 2.1 CIENCIAS DE LA COMPUTACIÓN I Funciones II y Cadena de Caracteres Utilizando Code::Blocks 23 de noviembre de 2011 Lic. Nilton Alan García Hilares Universidad Mayor de San Marcos

Upload: josue-armenta

Post on 11-Jan-2016

26 views

Category:

Documents


0 download

DESCRIPTION

Programacion

TRANSCRIPT

Page 1: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.1

CIENCIAS DE LACOMPUTACIÓN I

Funciones II y Cadena deCaracteres

Utilizando Code::Blocks

23 de noviembre de 2011

Lic. Nilton Alan García HilaresUniversidad Mayor de San Marcos

Page 2: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.2

Contenido

Introducción

Funciones IIRecursividadFunciones con arreglos

Caracteres y CadenasFundamentosCctypeCstdlibCstring

Page 3: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.3

Objetivos

1 Comprender el concepto de recursividad.2 Extender el uso de funciones relacionadas con arreglos.3 Conocer las diversas librerías para trabajar con caracteres

y cadenas.

Page 4: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.4

Recursividad

Los programas que ya se han visto están organizados engeneral como funciones que llaman unas a otras, en formajerárquica y disciplinada. Para algunos tipos de problemas esútil tener que se llamen a sí mismas. Una función recursiva esuna función que se llama a si misma ya sea directa oindirectamente a través de otra función.

Ejemplo

La función factorial puede definirse de forma recursiva:

int factorial (int N){int R;if (N==0 || N==1) R=1;else R=N*factorial(N-1);return N;

}

Page 5: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.4

Recursividad

Los programas que ya se han visto están organizados engeneral como funciones que llaman unas a otras, en formajerárquica y disciplinada. Para algunos tipos de problemas esútil tener que se llamen a sí mismas. Una función recursiva esuna función que se llama a si misma ya sea directa oindirectamente a través de otra función.

Ejemplo

La función factorial puede definirse de forma recursiva:

int factorial (int N){int R;if (N==0 || N==1) R=1;else R=N*factorial(N-1);return N;

}

Page 6: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.5

Llamadas recursivas

Ejemplo

Si se ejecuta la función factorial(5), definida anteriormente , ten-dremos:

Page 7: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.6

Recursividad vs Iteración

Cualquier problema que puede ser resuelto en formarecursiva también puede ser resuelto de forma iterativa.Normalmente se escoge un enfoque recursivo enpreferencia a uno iterativo, cuando el enfoque recursivo esmás natural al problema y resulta en el programador másfácil de comprender y depurar. Otra razón paraseleccionar un enfoque recursivo es que la solucióniterativa pudiera no resultar aparente.Evite el uso de recursividad cuando se requierarendimiento. Las llamadas recursivas toman tiempo yrequieren memoria adicional.Un programa muy funcionalizado en comparación con unomonolítico (es decir, de una sola pieza, sin funciones)hace grandes cantidades de llamadas de función y estasconsumen memoria y tiempo de ejecución en elprocesador. Pero los programas monolíticos son difícilesde programar, de mantener, depurar y modificar.

Page 8: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.6

Recursividad vs Iteración

Cualquier problema que puede ser resuelto en formarecursiva también puede ser resuelto de forma iterativa.Normalmente se escoge un enfoque recursivo enpreferencia a uno iterativo, cuando el enfoque recursivo esmás natural al problema y resulta en el programador másfácil de comprender y depurar. Otra razón paraseleccionar un enfoque recursivo es que la solucióniterativa pudiera no resultar aparente.Evite el uso de recursividad cuando se requierarendimiento. Las llamadas recursivas toman tiempo yrequieren memoria adicional.Un programa muy funcionalizado en comparación con unomonolítico (es decir, de una sola pieza, sin funciones)hace grandes cantidades de llamadas de función y estasconsumen memoria y tiempo de ejecución en elprocesador. Pero los programas monolíticos son difícilesde programar, de mantener, depurar y modificar.

Page 9: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.6

Recursividad vs Iteración

Cualquier problema que puede ser resuelto en formarecursiva también puede ser resuelto de forma iterativa.Normalmente se escoge un enfoque recursivo enpreferencia a uno iterativo, cuando el enfoque recursivo esmás natural al problema y resulta en el programador másfácil de comprender y depurar. Otra razón paraseleccionar un enfoque recursivo es que la solucióniterativa pudiera no resultar aparente.Evite el uso de recursividad cuando se requierarendimiento. Las llamadas recursivas toman tiempo yrequieren memoria adicional.Un programa muy funcionalizado en comparación con unomonolítico (es decir, de una sola pieza, sin funciones)hace grandes cantidades de llamadas de función y estasconsumen memoria y tiempo de ejecución en elprocesador. Pero los programas monolíticos son difícilesde programar, de mantener, depurar y modificar.

Page 10: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.7

Funciones con arreglos1 Declaración: una función que recibe un arreglo como

argumento se declara de manera habitual, especificandoel argumento que será el arreglo.

2 Llamada: para pasar un arreglo como argumento de unafuncione, especifique el nombre del arreglo sin corchetes.

Ejemplo

// prototipo://void Funcion(int A[10]);

int Vector[10];// llamada :Funcion(Vector);

Cuando se trabaja con arreglos como argumentos, esnecesario tener el tamaño del mismo para poder efectuar losprocedimientos necesarios sobre el mismo, por lo que eltamaño del arreglo también suele se r pasado comoargumento.

Page 11: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.7

Funciones con arreglos1 Declaración: una función que recibe un arreglo como

argumento se declara de manera habitual, especificandoel argumento que será el arreglo.

2 Llamada: para pasar un arreglo como argumento de unafuncione, especifique el nombre del arreglo sin corchetes.

Ejemplo

// prototipo://void Funcion(int A[10]);

int Vector[10];// llamada :Funcion(Vector);

Cuando se trabaja con arreglos como argumentos, esnecesario tener el tamaño del mismo para poder efectuar losprocedimientos necesarios sobre el mismo, por lo que eltamaño del arreglo también suele se r pasado comoargumento.

Page 12: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.7

Funciones con arreglos1 Declaración: una función que recibe un arreglo como

argumento se declara de manera habitual, especificandoel argumento que será el arreglo.

2 Llamada: para pasar un arreglo como argumento de unafuncione, especifique el nombre del arreglo sin corchetes.

Ejemplo

// prototipo://void Funcion(int A[10]);

int Vector[10];// llamada :Funcion(Vector);

Cuando se trabaja con arreglos como argumentos, esnecesario tener el tamaño del mismo para poder efectuar losprocedimientos necesarios sobre el mismo, por lo que eltamaño del arreglo también suele se r pasado comoargumento.

Page 13: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.8

Cadenas y Caracteres

Un carácter es el tipo básico alfanumérico, es decir que puedecontener un carácter, un dígito numérico o un signo depuntuación. En C/C++ son representados mediante el tipo dedato char. Los tipos de dato char también son tratados comoun tipo de dato numérico entero lo cual nos permite usarvariables char para trabajar con valores pequeños, siempreque lo consideremos necesario, esta una correspondenciaentre números y caracteres recibe el nombre de código ASCII.

Una cadena en C/C++ es un arreglo de caracteres, o valoresde tipo char, terminados con el carácter nulo, es decir el valornumérico 0. Internamente, en el ordenador, se almacenan enposiciones consecutivas de memoria. Este tipo de estructurasrecibe un tratamiento muy especial, ya que es de gran utilidady su uso es continuo.

Page 14: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.8

Cadenas y Caracteres

Un carácter es el tipo básico alfanumérico, es decir que puedecontener un carácter, un dígito numérico o un signo depuntuación. En C/C++ son representados mediante el tipo dedato char. Los tipos de dato char también son tratados comoun tipo de dato numérico entero lo cual nos permite usarvariables char para trabajar con valores pequeños, siempreque lo consideremos necesario, esta una correspondenciaentre números y caracteres recibe el nombre de código ASCII.

Una cadena en C/C++ es un arreglo de caracteres, o valoresde tipo char, terminados con el carácter nulo, es decir el valornumérico 0. Internamente, en el ordenador, se almacenan enposiciones consecutivas de memoria. Este tipo de estructurasrecibe un tratamiento muy especial, ya que es de gran utilidady su uso es continuo.

Page 15: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.9

Cadenas y Caracteres

Ejemplo

// Char:char Letra = ‘a’;

// Cadena:char Palabra[] = “HOLA”;char Cadena[4];Cadena[0]=‘C’;Cadena[1]=‘A’;Cadena[2]=‘S’;Cadena[3]=‘A’;

Page 16: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.10

Biblioteca de manejo de caracteres

Incluye varias funciones que ejecutan pruebas útiles ymanipulaciones de datos tipo carácter. Cada función recibe uncarácter presentado como un int o un EOF como argumento.

CabeceraPara utilizar la librería de funciones de caracteres se debeincluir la cabecera:

# incluce <cctype>

Las funciones más importantes en esta librería, son las quenos permiten determinar la naturaleza del argumento, ya seade tipo numérico, alfabético, alfanumérico, hexadecimal, etc.

Page 17: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.10

Biblioteca de manejo de caracteres

Incluye varias funciones que ejecutan pruebas útiles ymanipulaciones de datos tipo carácter. Cada función recibe uncarácter presentado como un int o un EOF como argumento.

CabeceraPara utilizar la librería de funciones de caracteres se debeincluir la cabecera:

# incluce <cctype>

Las funciones más importantes en esta librería, son las quenos permiten determinar la naturaleza del argumento, ya seade tipo numérico, alfabético, alfanumérico, hexadecimal, etc.

Page 18: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.10

Biblioteca de manejo de caracteres

Incluye varias funciones que ejecutan pruebas útiles ymanipulaciones de datos tipo carácter. Cada función recibe uncarácter presentado como un int o un EOF como argumento.

CabeceraPara utilizar la librería de funciones de caracteres se debeincluir la cabecera:

# incluce <cctype>

Las funciones más importantes en esta librería, son las quenos permiten determinar la naturaleza del argumento, ya seade tipo numérico, alfabético, alfanumérico, hexadecimal, etc.

Page 19: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.11

Funciones Ctype

prototipo descripcionint 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)int isalnum(int c) Evalúa si c es una letra o digito (V/F)int islower(int c) Evalúa si c es una letra minúscula (V/F)int isupper(int c) Evalúa si c es una letra mayúscula (V/F)

int isspace(int c) Evalúa si c es un espacio en blanco,)tabulador o salto de linea (V/F)

int tolower(int c) Regresa la minúscula de c (V/F)int toupper(int c) Regresa la mayúscula de c (V/F)

Page 20: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.12

Funciones de conversión de cadenas

En esta sección presentaremos funciones de conversión decadenas de caracteres correspondientes a la librería generalde utilerías Cstdlib. Estas funciones convierten cadenas dedígitos enteros y de punto flotante.

Prototipo Descripcióndouble atof(const char *nPtr) convierte nPtr a double

int atoi(const char *nPtr) convierte nPtr a intlong atol(const char *nPtr) convierte nPtr a long int

Nótese que se utiliza const para la declaración de la variable,ya que nPtr es un apuntador a constante de carácter (constchar), const declara que el valor del argumento no serámodificado.

Ejemplo

char Numero[]=“159”;int N;N = atoi(Numero);

Page 21: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.12

Funciones de conversión de cadenas

En esta sección presentaremos funciones de conversión decadenas de caracteres correspondientes a la librería generalde utilerías Cstdlib. Estas funciones convierten cadenas dedígitos enteros y de punto flotante.

Prototipo Descripcióndouble atof(const char *nPtr) convierte nPtr a double

int atoi(const char *nPtr) convierte nPtr a intlong atol(const char *nPtr) convierte nPtr a long int

Nótese que se utiliza const para la declaración de la variable,ya que nPtr es un apuntador a constante de carácter (constchar), const declara que el valor del argumento no serámodificado.

Ejemplo

char Numero[]=“159”;int N;N = atoi(Numero);

Page 22: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.12

Funciones de conversión de cadenas

En esta sección presentaremos funciones de conversión decadenas de caracteres correspondientes a la librería generalde utilerías Cstdlib. Estas funciones convierten cadenas dedígitos enteros y de punto flotante.

Prototipo Descripcióndouble atof(const char *nPtr) convierte nPtr a double

int atoi(const char *nPtr) convierte nPtr a intlong atol(const char *nPtr) convierte nPtr a long int

Nótese que se utiliza const para la declaración de la variable,ya que nPtr es un apuntador a constante de carácter (constchar), const declara que el valor del argumento no serámodificado.

Ejemplo

char Numero[]=“159”;int N;N = atoi(Numero);

Page 23: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.13

Librería de manejo de cadenas

la librería de manejo de cadenas proporciona muchasfunciones útiles para manipular datos de cadenas, compararcadenas, buscar en cadenas de caracteres y otras cadenas,dividir cadenas y determinar la longitud de las mismas.

CabeceraPara utilizar la librería de manejo de cadena se debe incluir lacabecera:

# incluce <cstring>

Las funciones más importantes de esta librería son: strcpy,strncpy, strcat, strncat, strncmp, strncmp, strchr, strrchr, strstr,strlen.

Page 24: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.13

Librería de manejo de cadenas

la librería de manejo de cadenas proporciona muchasfunciones útiles para manipular datos de cadenas, compararcadenas, buscar en cadenas de caracteres y otras cadenas,dividir cadenas y determinar la longitud de las mismas.

CabeceraPara utilizar la librería de manejo de cadena se debe incluir lacabecera:

# incluce <cstring>

Las funciones más importantes de esta librería son: strcpy,strncpy, strcat, strncat, strncmp, strncmp, strchr, strrchr, strstr,strlen.

Page 25: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.13

Librería de manejo de cadenas

la librería de manejo de cadenas proporciona muchasfunciones útiles para manipular datos de cadenas, compararcadenas, buscar en cadenas de caracteres y otras cadenas,dividir cadenas y determinar la longitud de las mismas.

CabeceraPara utilizar la librería de manejo de cadena se debe incluir lacabecera:

# incluce <cstring>

Las funciones más importantes de esta librería son: strcpy,strncpy, strcat, strncat, strncmp, strncmp, strchr, strrchr, strstr,strlen.

Page 26: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.14

Funciones de manipulacion de cadenas

Prototipo / Descripciónsize_t strlen(const char *s)Determina la longuitud de la cadena Schar *strcpy(char *s1, const char *s2)Copia s2 a s1, regresando s1char *strncpy(char *s1, const char *s2, size)Copia n caracteres de s2 a s1, regresando s1char *strcat(char *s1, const char *s2, size)Agrega s2 a s1, regresando s1char *strncat(char *s1, const char *s2, size)Agrega n caracteres de s2 a s1, regresando s1

Ejemplo

char S1[20];char S2[]=“Palabra”;

strcpy(S1,S2);strcat(S1,S2);

Page 27: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.15

Funciones de comparacion de cadenas

Prototipo / Descripción

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)

int *strncmp(const char *s1, const char *s2)Compara n caracteres de s1 con s2, regresa(0 si s1 = s2, -1 si s1<s2 y 1 si s1>s2)

Ejemplo

char S1[]=“Hola mundo”;char S2[]=“Hola mundo”;char S3[]=“Hola planeta”;

strcmp(S1,S2); // retorna 0strcat(S1,S3); // retorna -1strncmp(S1,S3,4); // retorna 0strncmp(S1,S3,6); // retorna -1

Page 28: Cadena de Caracteres y Arreglos

Funciones II yCadena deCaracteres

Nilton A. GarciaHilares

Introducción

Funciones IIRecursividad

Funciones con arreglos

Caracteres y CadenasFundamentos

Cctype

Cstdlib

Cstring

2.16

Funciones de busqueda de cadenas

Prototipo / Descripción

char *strchr(const char *s, int c)Localiza la primera instancia del caracter c en ssi lo localiza devuelve un apuntador a c,si no un apuntador NULL

char *strrchr(const char *s, int c)Localiza la ultima instancia del caracter c en ssi lo localiza devuelve un apuntador a c,si no un apuntador NULL

char *strstr(const char *s1, const char *s2)Localiza la primera ocurrencia de s2 en s1si lo localiza devuelve un apuntador a la cadena en s1,si no un apuntador NULL

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!”