SlideShare ist ein Scribd-Unternehmen logo
1 von 10
Downloaden Sie, um offline zu lesen
8
                         Strings o Cadenas

8.1 ¿QUÉ SON LOS STRINGS?

En C no existe un tipo string como en otros lenguajes. No existe un tipo de
datos para almacenar texto, se utilizan arrays con el tipo de dato char.
Funcionan igual que los demás arrays con la diferencia que se utilizan letras
en vez de números.

Una cadena en C es una secuencia de cero o más caracteres seguidas por
un caracter NULL o 0:
Es importante preservar el caracter de terminación 0, ya que con éste es
como C define y maneja las longitudes de las cadenas. Todas las funciones
de la biblioteca estándar de C lo requieren para una operación satisfacto-
ria.
Por ejemplo la cadena de 5 elementos siguiente:

                        “H“   “O“   “L“     “A“   0

Declaración de Cadenas
Para declarar una cadena se hace como un array. La forma general de de-
clarar una cadena es la siguiente:

                         char nombre_cadena[longitud];



Por ejemplo la sentencia:
			                       char texto[20];
Declara la cadena texto de tamaño 20.

Además se debe tener en cuenta de considerar un elemento más al tamaño
de la cadena para el elemento 0 .


                                     119
Fundamentos de Programación

Inicialización de Cadenas
Para inicializar una cadena se puede hacer de la misma forma que se inicia-
liza un array y puede tenerse las siguientes formas:
      char cadena1[20] = “”;                         	 //cadena vacía
      char cadena2[20] = “esta es una cadena”;
      char cadena3[20] = ‘0’;
      char cadena4[ ] = { ‘a’, ’e’, ’i’, ’o’, ’u’ };

Asignación de Cadenas
A una cadena no se puede asignar un valor directamente con el signo =,
sino que se debe hacer a través de la función strcpy(), que se encuentra en
la librería <string.h>. En el caso de C++ se debe utilziar la libreria <cstring>
Ejemplo: En el programa implementado en Dev C++ se muestra el uso de
esta función:
       #include <iostream>
       #include <cstring> //para usar la función strcpy()

      using namespace std;

      int main(int argc, char *argv[])
      {
           char nombre[21];
      	    //nombre = “Juan Perez”;               //ERROR
      	    strcpy( nombre, “Juan Perez”);         //OK

        cout<<nombre;			                           //Imprime en pantalla
      						                                       //Juan Perez
        system(“PAUSE”);
        return EXIT_SUCCESS;
      }

8.2 OPERACIONES CON CADENAS

Al igual que con arrays se puede realizar las mismas operaciones básicas:
   •	 	ngreso de datos.
      I
   •	 	 ecorrido y procesamiento.
      R
   •	 	mpresión de la cadena.
      I

Ingreso de datos
Para ingresar datos en C se puede hacer uso de la función gets( ).
		              char cad1[20];

                                      120
8: Strings o Cadenas
		               printf(“Ingrese cadena 1:”);
		               gets(cad1);

En C++ podemos utilizar la función getline(), combinada con cin.
		           char cad1[20];
		           cout<<“Ingrese cadena 1:”;
		           cin.getline(cad1,20);

Recorrido de cadanas
Para recorrer una cadena podemos hacerlo como:
	       for(i=0; cadena[i]!=‘0’; i++)

		               O lo que es lo mismo:

	        for(i=0; cadena[i]; i++)

Salida de cadenas
Para escribir cadenas podemos utilizar en C la función puts( )
		              printf(“La cadena es: ”);
		              puts(cad1);

En C++ hacer uso de cout directamente
		               cout<<“La cadena es”<<cad1;
Ejemplo
El siguiente ejemplo lee una cadena y luego calcula el tamaño de la cadena
ingresada:
      #include <iostream>
      using namespace std;

     int main(int argc, char *argv[])
     {
         char cad1[60]; int i=0;
         cout<<”Ingrese cadena:”;          gets(cad1);
         for( i=0; cad1[i] != ‘0’; i++ );
         cout<<”La cadena Ingresada es “;          puts(cad1);
         cout<<”El tamaño es “<<i;

         system(“PAUSE”);
         return EXIT_SUCCESS;
     }


                                      121
Fundamentos de Programación

8.3 FUNCIONES DE CADENAS

Todas las funciones para manejo de cadenas tienen su prototipo en:
			                    #include <string.h>
Si es en C++ en #include <cstring>

Las funciones más comunes son:

  •	 char *strcpy(const char *dest, const char *orig) Copia la cadena de
     caracteres apuntada por orig (incluyendo el carácter terminador ‘0’) al
     vector apuntado por dest. La cadena de destino, debe ser suficiente-
     mente grande como para alojar la copia.
  •	 int strcmp(const char *s1, const char *s2) Compara las dos cadenas
     de caracteres s1 y s2. Devuelve un entero menor, igual o mayor que
     cero si se encuentra que s1 es, respectivamente, menor que, igual a,
     o mayor que s2.
  •	 char *strerror(int errnum) Devuelve un mensaje de error que corres-
     ponde a un número de error.
  •	 int strlen(const char *s) Calcula la longitud de la cadena de caracte-
     res.
  •	 char *strncat(char *s1, const char *s2, size_t n) Agrega n caracteres
     de s2 a s1.
  •	 int strncmp(const char *s1, char *s2, size_t n) Compara los primeros n
     caracteres de dos cadenas.
  •	 char *strncpy(const char *s1, const char *s2, size_t n) Copia los pri-
     meros n caracteres de s2 a s1.
  •	 strcasecmp(const char *s1, const char *s2) versión que ignora si son
     mayúsculas o minúsculas de strcmp().
  •	 strncasecmp(const char *s1, const char *s2, size_t n) versión insensi-
     ble a mayúsculas o minúsculas de strncmp() que compara los prime-
     ros n caracteres de s1.

Ejemplo:

#include <stdio.h>
void main()
{
  char cad[80];
  int i=0,vocal=0,consonante=0;
  printf(“Ingrese cadena”);
  gets(cad);

                                    122
8: Strings o Cadenas
    for( i=0; cad[i] != ‘0’; i++)
    {
      if(( cad[i]>=’a’ && cad[i]<=’z’) || (cad[i]>=’a’ && cad[i]<=’z’))
	              switch(cad[i])
	                { case ‘A’: case ‘a’:
		                      case ‘E’: case ‘e’:
		                      case ‘i’: case ‘I’:
		                      case ‘O’: case ‘o’:
		                      case ‘U’: case ‘u’: vocal++; break;
	                   default: consonante++;
	                 }
	             }
  	         printf(“Vocales %dn”,vocal);
         printf(“Consonantes %d”,consonante);
}

8.4 EJERCICIOS DE PROGRAMACIÓN RESUELTOS

1 Programa que lee y escribe el nombre, dirección y teléfono de una per-
sona.

   #include <iostream>
   using namespace std;
   int main(int argc, char *argv[])
   {
      char nombre[50];
      char direccion[150];
      char telefono[10];

       cout<<”Nombre : “; cin.getline(nombre,50);
       cout<<”Dirección : “; cin.getline(direccion,150);
       cout<<”Telefono : “; cin.getline(telefono,10);

       cout<<”nnEl nombre es : “<<nombre<<endl;
       cout<<”La direccion es : “<<direccion<<endl;
       cout<<”El telefono es    : “<<telefono<<endl;

       system(“PAUSE”);
       return EXIT_SUCCESS;
   }


                                             123
Fundamentos de Programación

2 Programa que muestras el uso de las funciones de cadenas en C.

   #include <iostream>
   using namespace std;
   int main(int argc, char *argv[])
   {
       string texto1, texto2 = “Hola “, texto3(“Que tal”);

        texto1 = texto2 + texto3 + “ estas? “;
        cout << texto1 << “n”;
        string subcadena (texto1, 2, 6); // 6 letras de texto1, desde la tercera
        cout << subcadena << “n”;
        string subcadena2;
        subcadena2 = texto1.substr(0, 5); //5 letras de texto1, desde el comienzo
        texto1.insert(5, “Juan “); // Inserto un texto en la posicion 6
        cout << texto1 << “n”;
        texto2.replace(1, 2, “ad”); // Cambio 2 letras en la posicion 2
        cout << texto2 << “n”;
        cout << “La longitud de texto1 es “ << texto1.size() << “n”;
        cout << “La tercera letra de texto1 es “ << texto1[2]
             << “ o bien “ << texto1.at(2) << “n”;
        if (texto2 == “Hada “)
           cout << “Texto 2 es Hadan”;
       system(“PAUSE”);
       return EXIT_SUCCESS;
   }

 3 Programa que lee una cadena desde el teclado y cuente el número de
caracteres de tres categorías: letras (a-z y A-Z), dígitos (0-9) y otros caracte-
res (espacios en blanco y caracteres especiales ?%..). Utilice las funciones
isdigit() e isalpha().

   #include <iostream>
   #define MAXCAD 80
   using namespace std;
   int main(int argc, char *argv[])
   {
      char linea[MAXCAD], *pc=linea;
      int digitos=0, letras=0, otros=0;
      cout<<”nEscriba una cadena (menor a “<<MAXCAD<<” caracteres):n”;
      gets(linea);

                                              124
8: Strings o Cadenas
       while (*pc != ‘0’) {
         if (isdigit(*pc))
              ++digitos;
         else
              if (isalpha(*pc))
                   ++letras;
              else
                   ++otros;
         ++pc;
       }
       cout<<”ntDigitos = “<<digitos
         <<”ntLetras = “<<letras
         <<”ntOtros = “<<otros<<”nn”;

       system(“PAUSE”);
       return EXIT_SUCCESS;
   }

 4 Programa que lea una cadena y busque un carácter en ella. Solo da
como salida el primer caracter encontrado, en caso de existir más de uno.

   #include <iostream>
   using namespace std;
   int main(int argc, char *argv[])
   {
      char caract, cadena[80], *ptr;
      cout<<”Introduzca la cadena donde se va a buscar:n”;
      gets(cadena);
      cout<<”nEscriba el caracter a buscar:n”;
      caract=getchar();
      ptr=strchr(cadena, caract);
      if (ptr==0)
           cout<<”El caracter “<<caract<<” no se encuentra en la cadena.n”;
      else
           cout<<”La posicion del caracter es “<<ptr-cadena+1<<”nn”;

       system(“PAUSE”);
       return EXIT_SUCCESS;
   }



                                            125
Fundamentos de Programación

 5 Programa que pide una cadena por el teclado y la imprima después de
convertir el primer carácter en mayúscula y el resto en minúsculas.
Por ejemplo, ante la entrada “hola MAMA“ devuelve la cadena: “Hola
mama“

   #include <iostream>
   #define MAXCADENA 20
   char *ConversionLetra(char *cadena);

   using namespace std;

   int main(int argc, char *argv[])
   {
      char tmp[MAXCADENA+1];
      /* Se suma 1 para el byte NUL */
      cout<<”nEscriba una cadena (de “<<MAXCADENA
         <<” caracteres maximo) y teclee INTRO:n”;
      gets(tmp);
      cout<<”n”<<ConversionLetra(tmp)<<”nn”;
      system(“PAUSE”);
      return EXIT_SUCCESS;
   }

   char *ConversionLetra(char *cadena)
   {
      char *pc;
      pc=cadena;
      *pc=toupper(*pc);
      ++pc;
      while (*pc != ‘0’){
          *pc = tolower(*pc);
          ++pc;
      }
      return(cadena);
   }

 6 Programa que compruebe si una cadena introducida por teclado es o no
un palíndromo. Un palíndromo es una cadena que se lee igual al derecho
que al revés. Por ejemplo:
   “reconocer”
   “110010011”

                                          126
8: Strings o Cadenas
  “anita lava la tina”
  “dábale arroz a la zorra el abad”
Observación: Ingresar la cadena sin espacios en blanco

   #include <iostream>
   #define TAM 40
       char palin[TAM];
       int longitud,a=0;
       int cont;
   using namespace std;
   int main(int argc, char *argv[])
   {
       cout<<”nIngrese una palabra:nn”;
       gets(palin);
       longitud=strlen(palin);
       for(cont=longitud-1;palin[cont]==palin[a] && cont>=0;cont--,a++);
          if(a==longitud){
              cout<<”nEs un palindromon”;
         }else{
              cout<<”nNo es palindromon”;
         }
      system(“PAUSE”);
      return EXIT_SUCCESS;
   }

 7 Programa que convierte de un número ROMANO ingresado por teclado
a un número ARÁBIGO en formato decimal. Una entrada válida sería XXVII
y la salida sería: 27.

   #include <iostream>
   #include <cstring>
   using namespace std;
   int main(int argc, char *argv[])
   {
      char romano[10];
      long int arabigo=0;
      char caracter;
      int longitud;
      system(“CLS”);
      cout<<”Ingrese el numero romano: “; cin>>romano;
      longitud=strlen(romano);

                                           127
Fundamentos de Programación

       for(int i=longitud-1;i>=0;i--) {
           caracter=romano[i];
           switch(caracter) {
              case ‘M’: arabigo+=1000; break;
              case ‘D’: if(i<longitud-1 && romano[i+1]==’M’)
                          arabigo-=500;
                      else
                          arabigo+=500; break;
              case ‘C’: if(i<longitud-1 && strchr(“DM”,romano[i+1]))
                          arabigo-=100;
                      else
                          arabigo+=100; break;
              case ‘L’: if(i<longitud-1 && strchr(“CDM”,romano[i+1]))
                          arabigo-=50;
                      else
                          arabigo+=50; break;
              case ‘X’: if(i<longitud-1 && strchr(“LCDM”,romano[i+1]))
                          arabigo-=10;
                      else
                          arabigo+=10; break;
              case ‘V’: if(i<longitud-1 && strchr(“XLCDM”,romano[i+1]))
                          arabigo-=5;
                      else
                          arabigo+=5; break;
              case ‘I’: if(i<longitud-1 && strchr(“VXLCDM”,romano[i+1]))
                          arabigo-=1;
                      else
                          arabigo+=1; break;
           }
       }
       cout<<”El numero “<<romano<<” en arabigo es: “<<arabigo<<endl;
       system(“PAUSE”);
       return EXIT_SUCCESS;
   }




                                           128

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (19)

Tema3 p2%20
Tema3 p2%20Tema3 p2%20
Tema3 p2%20
 
Programar en c
Programar en cProgramar en c
Programar en c
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
 
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenas
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenasTap u2-componentes y librerias-programa para cifrar y descifrar cadenas
Tap u2-componentes y librerias-programa para cifrar y descifrar cadenas
 
Ejercicios de programación.
Ejercicios de programación.Ejercicios de programación.
Ejercicios de programación.
 
Pract met de la program templa
Pract met de la program templaPract met de la program templa
Pract met de la program templa
 
Separata java script
Separata java scriptSeparata java script
Separata java script
 
Problemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2bProblemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2b
 
Interpolaion c++
Interpolaion c++Interpolaion c++
Interpolaion c++
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacion
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
 
Lenguajec++
Lenguajec++Lenguajec++
Lenguajec++
 
Programación en OTcl
Programación en OTclProgramación en OTcl
Programación en OTcl
 
Informe tecnico victor_uex
Informe tecnico victor_uexInforme tecnico victor_uex
Informe tecnico victor_uex
 
Funciones de Strings en PHP
Funciones de Strings en PHPFunciones de Strings en PHP
Funciones de Strings en PHP
 
Codigo
CodigoCodigo
Codigo
 
Charla Mysql
Charla MysqlCharla Mysql
Charla Mysql
 
Ejercicios de programacion concurrente
Ejercicios de programacion concurrenteEjercicios de programacion concurrente
Ejercicios de programacion concurrente
 

Andere mochten auch

Understanding Advanced Buffer Overflow
Understanding Advanced Buffer OverflowUnderstanding Advanced Buffer Overflow
Understanding Advanced Buffer OverflowConferencias FIST
 
Historia de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan SaccoHistoria de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan SaccoJuan Sacco
 
Castells manuel la era de la informacion tomo 2
Castells manuel   la era de la informacion tomo 2Castells manuel   la era de la informacion tomo 2
Castells manuel la era de la informacion tomo 2ProjectMart
 
CLASES STRING MATH TIME
CLASES STRING MATH TIMECLASES STRING MATH TIME
CLASES STRING MATH TIMEFernando Solis
 
Basicos. ropa interior- productos bebe
Basicos. ropa interior- productos bebeBasicos. ropa interior- productos bebe
Basicos. ropa interior- productos bebemilton_sss
 
De los webs educativos al material didáctico web
De los webs educativos al material didáctico webDe los webs educativos al material didáctico web
De los webs educativos al material didáctico webJuan Cucuri
 
Dsn wsj book
Dsn wsj bookDsn wsj book
Dsn wsj booklraaron
 
Infrastructure and Investment Opportunities for Energy Efficiency in Buildings
Infrastructure and Investment Opportunities for Energy Efficiency in BuildingsInfrastructure and Investment Opportunities for Energy Efficiency in Buildings
Infrastructure and Investment Opportunities for Energy Efficiency in BuildingsAlliance To Save Energy
 
Dossier villa + primavista
Dossier villa + primavistaDossier villa + primavista
Dossier villa + primavistaPRIMAVISTA SPAIN
 
Prüfung elektrischer Einrichtungen | weyer spezial
Prüfung elektrischer Einrichtungen | weyer spezialPrüfung elektrischer Einrichtungen | weyer spezial
Prüfung elektrischer Einrichtungen | weyer spezialweyer gruppe
 
Ahs aoit internship guide 2011
Ahs aoit internship guide 2011Ahs aoit internship guide 2011
Ahs aoit internship guide 2011NAFCareerAcads
 
Trisquelmedia: Experiencia de Usuario
Trisquelmedia: Experiencia de UsuarioTrisquelmedia: Experiencia de Usuario
Trisquelmedia: Experiencia de UsuarioTrisquelmedia
 
Gestione e manutenzione delle piscine
Gestione e manutenzione delle piscineGestione e manutenzione delle piscine
Gestione e manutenzione delle piscineLifenergy
 
Curso prático de direito previdenciário ivan kertzman - 2015
Curso prático de direito previdenciário   ivan kertzman - 2015Curso prático de direito previdenciário   ivan kertzman - 2015
Curso prático de direito previdenciário ivan kertzman - 2015celso dias
 

Andere mochten auch (20)

Menos Buffer Overflows, más SQL Injections
Menos Buffer Overflows, más SQL InjectionsMenos Buffer Overflows, más SQL Injections
Menos Buffer Overflows, más SQL Injections
 
Understanding Advanced Buffer Overflow
Understanding Advanced Buffer OverflowUnderstanding Advanced Buffer Overflow
Understanding Advanced Buffer Overflow
 
Bolanos marco tarea1
Bolanos marco tarea1Bolanos marco tarea1
Bolanos marco tarea1
 
Historia de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan SaccoHistoria de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan Sacco
 
Sistema buffer
Sistema bufferSistema buffer
Sistema buffer
 
Castells manuel la era de la informacion tomo 2
Castells manuel   la era de la informacion tomo 2Castells manuel   la era de la informacion tomo 2
Castells manuel la era de la informacion tomo 2
 
CLASES STRING MATH TIME
CLASES STRING MATH TIMECLASES STRING MATH TIME
CLASES STRING MATH TIME
 
Ailesbury Hair Implant Training
Ailesbury Hair Implant Training Ailesbury Hair Implant Training
Ailesbury Hair Implant Training
 
Basicos. ropa interior- productos bebe
Basicos. ropa interior- productos bebeBasicos. ropa interior- productos bebe
Basicos. ropa interior- productos bebe
 
9. boris podolsky ctc media
9. boris podolsky   ctc media9. boris podolsky   ctc media
9. boris podolsky ctc media
 
De los webs educativos al material didáctico web
De los webs educativos al material didáctico webDe los webs educativos al material didáctico web
De los webs educativos al material didáctico web
 
Dsn wsj book
Dsn wsj bookDsn wsj book
Dsn wsj book
 
Infrastructure and Investment Opportunities for Energy Efficiency in Buildings
Infrastructure and Investment Opportunities for Energy Efficiency in BuildingsInfrastructure and Investment Opportunities for Energy Efficiency in Buildings
Infrastructure and Investment Opportunities for Energy Efficiency in Buildings
 
Dossier villa + primavista
Dossier villa + primavistaDossier villa + primavista
Dossier villa + primavista
 
Ingelec motorcc
Ingelec motorccIngelec motorcc
Ingelec motorcc
 
Prüfung elektrischer Einrichtungen | weyer spezial
Prüfung elektrischer Einrichtungen | weyer spezialPrüfung elektrischer Einrichtungen | weyer spezial
Prüfung elektrischer Einrichtungen | weyer spezial
 
Ahs aoit internship guide 2011
Ahs aoit internship guide 2011Ahs aoit internship guide 2011
Ahs aoit internship guide 2011
 
Trisquelmedia: Experiencia de Usuario
Trisquelmedia: Experiencia de UsuarioTrisquelmedia: Experiencia de Usuario
Trisquelmedia: Experiencia de Usuario
 
Gestione e manutenzione delle piscine
Gestione e manutenzione delle piscineGestione e manutenzione delle piscine
Gestione e manutenzione delle piscine
 
Curso prático de direito previdenciário ivan kertzman - 2015
Curso prático de direito previdenciário   ivan kertzman - 2015Curso prático de direito previdenciário   ivan kertzman - 2015
Curso prático de direito previdenciário ivan kertzman - 2015
 

Ähnlich wie 08 strings o cadenas

Ähnlich wie 08 strings o cadenas (20)

Funciones cadena
Funciones cadenaFunciones cadena
Funciones cadena
 
Cadenas
CadenasCadenas
Cadenas
 
Cadenas y punteros.ppt
Cadenas y punteros.pptCadenas y punteros.ppt
Cadenas y punteros.ppt
 
Fundamentos de programación librería string C++
Fundamentos de programación librería string C++Fundamentos de programación librería string C++
Fundamentos de programación librería string C++
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Comandos importantes en c++
Comandos importantes en c++Comandos importantes en c++
Comandos importantes en c++
 
Taller 1 de estructuras
Taller 1 de estructurasTaller 1 de estructuras
Taller 1 de estructuras
 
Practicas c++
Practicas c++Practicas c++
Practicas c++
 
Practicas c++
Practicas c++Practicas c++
Practicas c++
 
Ejercicios programacion cortos
Ejercicios programacion cortosEjercicios programacion cortos
Ejercicios programacion cortos
 
Practicas segundo parcial de programacion avanzada
Practicas segundo parcial de programacion avanzadaPracticas segundo parcial de programacion avanzada
Practicas segundo parcial de programacion avanzada
 
!Prograc6
!Prograc6!Prograc6
!Prograc6
 
SantaellaU8-EjerciciosCadenadeCaracteres
SantaellaU8-EjerciciosCadenadeCaracteresSantaellaU8-EjerciciosCadenadeCaracteres
SantaellaU8-EjerciciosCadenadeCaracteres
 
Fpr Tema6 www.fresymetal.com
Fpr Tema6 www.fresymetal.comFpr Tema6 www.fresymetal.com
Fpr Tema6 www.fresymetal.com
 
Funciones de Cadenas/ Computación para ingenieros
Funciones de Cadenas/ Computación para ingenierosFunciones de Cadenas/ Computación para ingenieros
Funciones de Cadenas/ Computación para ingenieros
 
6... producciones por derecha e izquierda
6... producciones por derecha e izquierda6... producciones por derecha e izquierda
6... producciones por derecha e izquierda
 
Apunte cadenas
Apunte cadenasApunte cadenas
Apunte cadenas
 
introducción a la programación utilizando C++.pptx
introducción a la programación utilizando C++.pptxintroducción a la programación utilizando C++.pptx
introducción a la programación utilizando C++.pptx
 

08 strings o cadenas

  • 1. 8 Strings o Cadenas 8.1 ¿QUÉ SON LOS STRINGS? En C no existe un tipo string como en otros lenguajes. No existe un tipo de datos para almacenar texto, se utilizan arrays con el tipo de dato char. Funcionan igual que los demás arrays con la diferencia que se utilizan letras en vez de números. Una cadena en C es una secuencia de cero o más caracteres seguidas por un caracter NULL o 0: Es importante preservar el caracter de terminación 0, ya que con éste es como C define y maneja las longitudes de las cadenas. Todas las funciones de la biblioteca estándar de C lo requieren para una operación satisfacto- ria. Por ejemplo la cadena de 5 elementos siguiente: “H“ “O“ “L“ “A“ 0 Declaración de Cadenas Para declarar una cadena se hace como un array. La forma general de de- clarar una cadena es la siguiente: char nombre_cadena[longitud]; Por ejemplo la sentencia: char texto[20]; Declara la cadena texto de tamaño 20. Además se debe tener en cuenta de considerar un elemento más al tamaño de la cadena para el elemento 0 . 119
  • 2. Fundamentos de Programación Inicialización de Cadenas Para inicializar una cadena se puede hacer de la misma forma que se inicia- liza un array y puede tenerse las siguientes formas: char cadena1[20] = “”; //cadena vacía char cadena2[20] = “esta es una cadena”; char cadena3[20] = ‘0’; char cadena4[ ] = { ‘a’, ’e’, ’i’, ’o’, ’u’ }; Asignación de Cadenas A una cadena no se puede asignar un valor directamente con el signo =, sino que se debe hacer a través de la función strcpy(), que se encuentra en la librería <string.h>. En el caso de C++ se debe utilziar la libreria <cstring> Ejemplo: En el programa implementado en Dev C++ se muestra el uso de esta función: #include <iostream> #include <cstring> //para usar la función strcpy() using namespace std; int main(int argc, char *argv[]) { char nombre[21]; //nombre = “Juan Perez”; //ERROR strcpy( nombre, “Juan Perez”); //OK cout<<nombre; //Imprime en pantalla //Juan Perez system(“PAUSE”); return EXIT_SUCCESS; } 8.2 OPERACIONES CON CADENAS Al igual que con arrays se puede realizar las mismas operaciones básicas: • ngreso de datos. I • ecorrido y procesamiento. R • mpresión de la cadena. I Ingreso de datos Para ingresar datos en C se puede hacer uso de la función gets( ). char cad1[20]; 120
  • 3. 8: Strings o Cadenas printf(“Ingrese cadena 1:”); gets(cad1); En C++ podemos utilizar la función getline(), combinada con cin. char cad1[20]; cout<<“Ingrese cadena 1:”; cin.getline(cad1,20); Recorrido de cadanas Para recorrer una cadena podemos hacerlo como: for(i=0; cadena[i]!=‘0’; i++) O lo que es lo mismo: for(i=0; cadena[i]; i++) Salida de cadenas Para escribir cadenas podemos utilizar en C la función puts( ) printf(“La cadena es: ”); puts(cad1); En C++ hacer uso de cout directamente cout<<“La cadena es”<<cad1; Ejemplo El siguiente ejemplo lee una cadena y luego calcula el tamaño de la cadena ingresada: #include <iostream> using namespace std; int main(int argc, char *argv[]) { char cad1[60]; int i=0; cout<<”Ingrese cadena:”; gets(cad1); for( i=0; cad1[i] != ‘0’; i++ ); cout<<”La cadena Ingresada es “; puts(cad1); cout<<”El tamaño es “<<i; system(“PAUSE”); return EXIT_SUCCESS; } 121
  • 4. Fundamentos de Programación 8.3 FUNCIONES DE CADENAS Todas las funciones para manejo de cadenas tienen su prototipo en: #include <string.h> Si es en C++ en #include <cstring> Las funciones más comunes son: • char *strcpy(const char *dest, const char *orig) Copia la cadena de caracteres apuntada por orig (incluyendo el carácter terminador ‘0’) al vector apuntado por dest. La cadena de destino, debe ser suficiente- mente grande como para alojar la copia. • int strcmp(const char *s1, const char *s2) Compara las dos cadenas de caracteres s1 y s2. Devuelve un entero menor, igual o mayor que cero si se encuentra que s1 es, respectivamente, menor que, igual a, o mayor que s2. • char *strerror(int errnum) Devuelve un mensaje de error que corres- ponde a un número de error. • int strlen(const char *s) Calcula la longitud de la cadena de caracte- res. • char *strncat(char *s1, const char *s2, size_t n) Agrega n caracteres de s2 a s1. • int strncmp(const char *s1, char *s2, size_t n) Compara los primeros n caracteres de dos cadenas. • char *strncpy(const char *s1, const char *s2, size_t n) Copia los pri- meros n caracteres de s2 a s1. • strcasecmp(const char *s1, const char *s2) versión que ignora si son mayúsculas o minúsculas de strcmp(). • strncasecmp(const char *s1, const char *s2, size_t n) versión insensi- ble a mayúsculas o minúsculas de strncmp() que compara los prime- ros n caracteres de s1. Ejemplo: #include <stdio.h> void main() { char cad[80]; int i=0,vocal=0,consonante=0; printf(“Ingrese cadena”); gets(cad); 122
  • 5. 8: Strings o Cadenas for( i=0; cad[i] != ‘0’; i++) { if(( cad[i]>=’a’ && cad[i]<=’z’) || (cad[i]>=’a’ && cad[i]<=’z’)) switch(cad[i]) { case ‘A’: case ‘a’: case ‘E’: case ‘e’: case ‘i’: case ‘I’: case ‘O’: case ‘o’: case ‘U’: case ‘u’: vocal++; break; default: consonante++; } } printf(“Vocales %dn”,vocal); printf(“Consonantes %d”,consonante); } 8.4 EJERCICIOS DE PROGRAMACIÓN RESUELTOS 1 Programa que lee y escribe el nombre, dirección y teléfono de una per- sona. #include <iostream> using namespace std; int main(int argc, char *argv[]) { char nombre[50]; char direccion[150]; char telefono[10]; cout<<”Nombre : “; cin.getline(nombre,50); cout<<”Dirección : “; cin.getline(direccion,150); cout<<”Telefono : “; cin.getline(telefono,10); cout<<”nnEl nombre es : “<<nombre<<endl; cout<<”La direccion es : “<<direccion<<endl; cout<<”El telefono es : “<<telefono<<endl; system(“PAUSE”); return EXIT_SUCCESS; } 123
  • 6. Fundamentos de Programación 2 Programa que muestras el uso de las funciones de cadenas en C. #include <iostream> using namespace std; int main(int argc, char *argv[]) { string texto1, texto2 = “Hola “, texto3(“Que tal”); texto1 = texto2 + texto3 + “ estas? “; cout << texto1 << “n”; string subcadena (texto1, 2, 6); // 6 letras de texto1, desde la tercera cout << subcadena << “n”; string subcadena2; subcadena2 = texto1.substr(0, 5); //5 letras de texto1, desde el comienzo texto1.insert(5, “Juan “); // Inserto un texto en la posicion 6 cout << texto1 << “n”; texto2.replace(1, 2, “ad”); // Cambio 2 letras en la posicion 2 cout << texto2 << “n”; cout << “La longitud de texto1 es “ << texto1.size() << “n”; cout << “La tercera letra de texto1 es “ << texto1[2] << “ o bien “ << texto1.at(2) << “n”; if (texto2 == “Hada “) cout << “Texto 2 es Hadan”; system(“PAUSE”); return EXIT_SUCCESS; } 3 Programa que lee una cadena desde el teclado y cuente el número de caracteres de tres categorías: letras (a-z y A-Z), dígitos (0-9) y otros caracte- res (espacios en blanco y caracteres especiales ?%..). Utilice las funciones isdigit() e isalpha(). #include <iostream> #define MAXCAD 80 using namespace std; int main(int argc, char *argv[]) { char linea[MAXCAD], *pc=linea; int digitos=0, letras=0, otros=0; cout<<”nEscriba una cadena (menor a “<<MAXCAD<<” caracteres):n”; gets(linea); 124
  • 7. 8: Strings o Cadenas while (*pc != ‘0’) { if (isdigit(*pc)) ++digitos; else if (isalpha(*pc)) ++letras; else ++otros; ++pc; } cout<<”ntDigitos = “<<digitos <<”ntLetras = “<<letras <<”ntOtros = “<<otros<<”nn”; system(“PAUSE”); return EXIT_SUCCESS; } 4 Programa que lea una cadena y busque un carácter en ella. Solo da como salida el primer caracter encontrado, en caso de existir más de uno. #include <iostream> using namespace std; int main(int argc, char *argv[]) { char caract, cadena[80], *ptr; cout<<”Introduzca la cadena donde se va a buscar:n”; gets(cadena); cout<<”nEscriba el caracter a buscar:n”; caract=getchar(); ptr=strchr(cadena, caract); if (ptr==0) cout<<”El caracter “<<caract<<” no se encuentra en la cadena.n”; else cout<<”La posicion del caracter es “<<ptr-cadena+1<<”nn”; system(“PAUSE”); return EXIT_SUCCESS; } 125
  • 8. Fundamentos de Programación 5 Programa que pide una cadena por el teclado y la imprima después de convertir el primer carácter en mayúscula y el resto en minúsculas. Por ejemplo, ante la entrada “hola MAMA“ devuelve la cadena: “Hola mama“ #include <iostream> #define MAXCADENA 20 char *ConversionLetra(char *cadena); using namespace std; int main(int argc, char *argv[]) { char tmp[MAXCADENA+1]; /* Se suma 1 para el byte NUL */ cout<<”nEscriba una cadena (de “<<MAXCADENA <<” caracteres maximo) y teclee INTRO:n”; gets(tmp); cout<<”n”<<ConversionLetra(tmp)<<”nn”; system(“PAUSE”); return EXIT_SUCCESS; } char *ConversionLetra(char *cadena) { char *pc; pc=cadena; *pc=toupper(*pc); ++pc; while (*pc != ‘0’){ *pc = tolower(*pc); ++pc; } return(cadena); } 6 Programa que compruebe si una cadena introducida por teclado es o no un palíndromo. Un palíndromo es una cadena que se lee igual al derecho que al revés. Por ejemplo: “reconocer” “110010011” 126
  • 9. 8: Strings o Cadenas “anita lava la tina” “dábale arroz a la zorra el abad” Observación: Ingresar la cadena sin espacios en blanco #include <iostream> #define TAM 40 char palin[TAM]; int longitud,a=0; int cont; using namespace std; int main(int argc, char *argv[]) { cout<<”nIngrese una palabra:nn”; gets(palin); longitud=strlen(palin); for(cont=longitud-1;palin[cont]==palin[a] && cont>=0;cont--,a++); if(a==longitud){ cout<<”nEs un palindromon”; }else{ cout<<”nNo es palindromon”; } system(“PAUSE”); return EXIT_SUCCESS; } 7 Programa que convierte de un número ROMANO ingresado por teclado a un número ARÁBIGO en formato decimal. Una entrada válida sería XXVII y la salida sería: 27. #include <iostream> #include <cstring> using namespace std; int main(int argc, char *argv[]) { char romano[10]; long int arabigo=0; char caracter; int longitud; system(“CLS”); cout<<”Ingrese el numero romano: “; cin>>romano; longitud=strlen(romano); 127
  • 10. Fundamentos de Programación for(int i=longitud-1;i>=0;i--) { caracter=romano[i]; switch(caracter) { case ‘M’: arabigo+=1000; break; case ‘D’: if(i<longitud-1 && romano[i+1]==’M’) arabigo-=500; else arabigo+=500; break; case ‘C’: if(i<longitud-1 && strchr(“DM”,romano[i+1])) arabigo-=100; else arabigo+=100; break; case ‘L’: if(i<longitud-1 && strchr(“CDM”,romano[i+1])) arabigo-=50; else arabigo+=50; break; case ‘X’: if(i<longitud-1 && strchr(“LCDM”,romano[i+1])) arabigo-=10; else arabigo+=10; break; case ‘V’: if(i<longitud-1 && strchr(“XLCDM”,romano[i+1])) arabigo-=5; else arabigo+=5; break; case ‘I’: if(i<longitud-1 && strchr(“VXLCDM”,romano[i+1])) arabigo-=1; else arabigo+=1; break; } } cout<<”El numero “<<romano<<” en arabigo es: “<<arabigo<<endl; system(“PAUSE”); return EXIT_SUCCESS; } 128