Cadena de Caracteres y Arreglos
-
Upload
josue-armenta -
Category
Documents
-
view
28 -
download
0
description
Transcript of 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
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
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.
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;
}
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;
}
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:
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.
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.
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.
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.
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.
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.
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.
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.
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’;
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.
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.
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.
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)
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);
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);
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);
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.
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.
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.
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);
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
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!”