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

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 Llamadasrecursivas 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 Recursividadvs 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 Recursividadvs 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 Recursividadvs 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 Funcionescon 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 Funcionescon 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 Funcionescon 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 Cadenasy 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 Cadenasy 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 Cadenasy 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 Bibliotecade 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 Bibliotecade 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 Bibliotecade 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 FuncionesCtype 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 Funcionesde 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 Funcionesde 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 Funcionesde 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íade 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íade 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íade 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 Funcionesde 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 Funcionesde 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 Funcionesde 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