Sie sind auf Seite 1von 39

22/04/2018

1 Mg. Edgar Ruiz Lizama


2 22/04/2018

CADENAS
Una cadena es una sarta de caracteres la cual en esencia es un
array unidimensional.
Formato basico:

<char> <identificador> [ <dimension> ]

Ejemplo:
char nombre[20]; // nombre hasta 20 caracteres.

en este caso el compilador asignará la marca de fin de cadena ‘\0’ al último de


la cadena nombre.
char nombre[20] = “JULISA ”;

'J' 'U' 'L' 'I' 'S' 'A' \0


0 1 2 3 4 5 6 Mg. Edgar Ruiz Lizama
3 22/04/2018

En cambio en la siguiente declaración


char nombre [ ] = {‘J’ ‘ u’ ‘l’ ‘ i’ ‘s’ ‘ a’};
el compilador no asigna la marca de fin de cadena al objeto nombre.

El objeto cin permite leer cadenas; pero sólo hasta que encuentra un espacio
en blanco.
ejemplo:

nombre R O S A A L V A R E Z
char nombre[20];
cout<<”ingrese nombre”;
cin>>nombre; // Rosa Alvarez
cout<< nombre <<endl; //Rosa

Si se quiere leer una cadena completa, debe usarse la función miembro


cin.getline; tal como
cingetline (nombre, 20);
Mg. Edgar Ruiz Lizama
4 22/04/2018

FUNCIONES DE MANEJO DE CADENAS


C++ posee en la librería string.h una gran variedad de funciones para el
manejo de cadenas.

a) strlen().- Función que devuelve la cantidad de caracteres que existen en


una cadena antes del carácter nulo.

b) strupr().- Función que permite convertir una cadena a mayúsculas

c) strlwr().- Función que permite convertir una cadena a minúsculas

d) strcpy (destino, origen).- Función que permite copiar el valor de una


cadena (cadena origen) a otra (cadena destino).

Mg. Edgar Ruiz Lizama


5 22/04/2018

e) strncpy (destino, origen, cantidad).- Función que permite copiar el


numero de caracteres especificados por cantidad de la cadena origen hacia
la cadena destino.

f) strcat (destino, origen).- Función que permite concatenar dos cadenas.


Una copia de la cadena origen se añade al final de la cadena destino.

g) strncat (destino, origen, cantidad).- Función que realiza la operación de


concatenación pero para un número de caracteres.

h) strcmp().- Función que permite comparar dos cadenas de caracteres.


Devuelve 0 si las cadenas comparadas son iguales y otro valor en caso
contrario.

Mg. Edgar Ruiz Lizama


6 22/04/2018
APLICACIONES
Ejemplo 1:
/*el identificador cin también lee cadenas pero termina o
trunca la cadena al encontrar el primer espacio en
blanco*/

#include <iostream>
using namespace std;

int main(void)//cadena0.cpp
{
char nombre[35];
cout<<"ingrese su nombre completo: ";
cin>>nombre;
cout<<"Hola, "<<nombre<<endl;

return 0;
}

Mg. Edgar Ruiz Lizama


7 22/04/2018

EJECUCION DEL PROGRAMA:

Mg. Edgar Ruiz Lizama


8 22/04/2018

Eemplo 2:
//uso de funciones para leer caracteres y cadenas
//en C++ se utiliza cin.get y cin.getline respectivamente

#include <iostream>
usung namespace std;
int main(void) //cadena1.cpp
{
char c;
cout<<"ingrese un caracter ";
cin.get(c);
cout<<"El caracter es "<<c<<endl;

return 0;
}

Mg. Edgar Ruiz Lizama


9 22/04/2018

EJECUCION DEL PROGRAMA:

Mg. Edgar Ruiz Lizama


10 22/04/2018

Ejemplo 3:
//uso de las funciones strcpy y strncpy
#include <iostream>
#include <string.h>

using namespace std;


int main()//cadena3.cpp
{
char x[]="Algoritmos y Programacion";
char y[30],z[30];
cout<<"El string en el array x es -> "<<x;
cout<<"\nEl string en el array x copiado hacia el array y es -> "
<<strcpy(y,x);
strncpy(z,x,12);
z[12]='\0';
cout<<"Parte del string en el array x copiado al array z es ->"
<<z<<endl;

return 0;
}

Mg. Edgar Ruiz Lizama


11 22/04/2018

EJECUCION DEL PROGRAMA:

Mg. Edgar Ruiz Lizama


12 22/04/2018
Ejemplo 4:
//uso de las funciones strcat y strncat
#include <iostream>
#include <string.h>
using namespace std;
int main() //cadena4.cpp
{
char s1[256]="En aquel tiempo, respondiendo Jesús, dijo: Te
alabo, Padre, Señor del cielo y ";
char s2[]=" de la tierra, porque escondiste estas cosas de los
sabios y ";
char s3[]="de los entendidos, y las revelaste a los niños.
Mateo 11,25-26";
cout<<" s1 = "<<s1<<endl<<endl;
cout<<" s2= "<<s2<<endl<<endl;

Mg. Edgar Ruiz Lizama


13 22/04/2018
... Continua
strcat(s1,s2);
cout<<"\nConcatenar s2 en s1: ";
cout<<endl<<"s1= "<<s1;
cout<<endl;
cout<<"\nS3= "<<s3;
cout<<"\nConcatenar s3 en s1: ";
strcat(s1,s3);
cout<<endl<<"\ns1= "<<s1;
cout<<endl<<endl;
cout<<"\nParte de la s3 concatenada en s2: ";
strncat(s2,s3,10);
cout<<endl<<s2<<endl<<endl;
return 0;
}
Mg. Edgar Ruiz Lizama
14 22/04/2018

EJECUCION DEL PROGRAMA:

Mg. Edgar Ruiz Lizama


15 22/04/2018
//editor de texto sencillo que lee una cadena y
//cuenta el numero de palabras en ella
#include <iostream>
using namespace std;
int main() //cadena5.cpp
{
char linea[80],c,sig, blanco;
int i=0, numpal;
//lectura de la linea de texto
cout<<"ingrese linea de texto> ";
while ((c=cin.get())!='\n')
{
linea[i++]=c;
}
linea [i++]='\0';
// conteo de palabras
numpal=i=0;
blanco=' ';
c=linea[i]; //comienzo de la cadena
//recorrido de la cadena
while (c)
{
if (c!=blanco)
{
sig=linea[i+1];
if ((sig==blanco) || (sig=='\0'))
++numpal;
}
c=linea[++i];
}
cout<<"Texto -> "<<linea<<"\nTiene "<<numpal<<" palabras"<<endl;
return 0;
} Mg. Edgar Ruiz Lizama
16 22/04/2018

EJECUCION DEL PROGRAMA

Mg. Edgar Ruiz Lizama


17 22/04/2018

// Escribe el nombre ingresado caracter por caracter

#include <iostream>

using namespace std;

int main()// cadena7.cpp


{
char s[]="juan jose";
int i;
for (i=0 ; i<sizeof(s)/sizeof(char); i++)
cout<<s[i]<<endl;

return 0;
}

Mg. Edgar Ruiz Lizama


18 22/04/2018

EJECUCION DEL PROGRAMA:

Mg. Edgar Ruiz Lizama


19 22/04/2018

// Utilizacion strcpy y strcat.

#include <iostream>
#include <string.h>
using namespace std;
int main(void)
{
char destino[25];
char *blanco = " ", *c = "C++", *Compilador = "mingw32-
g++";
strcpy(destino, Compilador);
strcat(destino, blanco);
strcat(destino, c);
cout<<destino<<endl;
return 0;
}

Mg. Edgar Ruiz Lizama


20 22/04/2018

EJECUCION DEL PROGRAMA:

Mg. Edgar Ruiz Lizama


21 22/04/2018

/*muestra como el usuario puede definir sus propias funciones de


cadena */
#include <iostream> //version 1
const int MAX = 80;//funciones prototipo
int longcad(char s[]);
int comparacad(char s1[], char s2[]);
void copiacad(char dest[], char orig[]);
using namespace std;
int main() //funcads1.cpp
{
char buffer[MAX];
buffer[0]='\0';
cout<<"<1> longcad(buffer)= "<<longcad(buffer)<<endl;
copiacad(buffer, "Algoritmos y Programacion");
cout<<"<2> buffer: "<<buffer<<endl;
cout<<"<3> longcad(buffer)= "<<longcad (buffer)<<endl;
cout<<"<4> comparacad(buffer, Algoritmos y Programacion)= ";
cout<<comparacad(buffer,"Algoritmos y Programacion")<<endl ;
cout<<"<5> comparacad(buffer, Algoritmos)= ";
cout<<comparacad(buffer, "Programacion")<<endl;

return 0;
- Continua -
Mg. Edgar Ruiz Lizama
}
22 22/04/2018

int longcad(char s[])


{
int i=0;
while (s[i]!=0)
++i;
return i;
}
int comparacad(char s1[], char s2[])
{
int i=0;
for ( ; s1[i]!=0 && s1[i]==s2[i]; i++)
;
return (int)(s1[i]-s2[i]);
}
void copiacad(char dest[], char orig[])
{
int i=0;
for( ; orig[i]!=0 ; i++)
dest[i]=orig[i]; //asignar a dest el caracter de orig
dest[i]=0; - Fin -
} Mg. Edgar Ruiz Lizama
23 22/04/2018

EJECUCION DEL PROGRAMA:

Mg. Edgar Ruiz Lizama


24 22/04/2018

/*muestra como el usuario puede definir sus propias funciones de


cadena usa punteros al array de cadena. Version 2 */
#include <iostream>

const int MAX = 80;


//funciones prototipo
int longcad(char *s);
int comparacad(char *s1, char *s2);
void copiacad(char *dest, char *orig);
using namespace std;
int main() //funcads2.cpp
{
char buffer[MAX];
buffer[0]='\0';
cout<<"<1> longcad(buffer)= "<<longcad(buffer)<<endl;
copiacad(buffer, "Algoritmos y Programacion");
cout<<"<2> buffer: "<<buffer<<endl;
cout<<"<3> longcad(buffer)= "<<longcad (buffer)<<endl;
cout<<"<4> comparacad(buffer, Algoritmos y Programacion)= ";
cout<<comparacad(buffer,"Algoritmos y Programacion")<<endl ;
cout<<"<5> comparacad(buffer, Algoritmos)= ";
cout<<comparacad(buffer, "Algoritmos")<<endl;

return 0; - Continua - Mg. Edgar Ruiz Lizama


}
25 22/04/2018

int longcad(char *s)


{
int i=0;
while (s[i]!=0)
++i;
return i;
}
int comparacad(char *s1, char *s2)
{
int i=0;
for( ; s1[i]!=0 && s1[i]==s2[i]; i++)
;
return (int)(s1[i]-s2[i]);
}
void copiacad(char *dest, char *orig)
{
int i=0;
for( ; orig[i]!=0 ; i++)
dest[i]=orig[i]; //asignar a dest el caracter de orig
dest[i]=0;
} - Fin - Mg. Edgar Ruiz Lizama
26 22/04/2018

EJECUCION DEL PROGRAMA:

Mg. Edgar Ruiz Lizama


27 22/04/2018

//funciones prototipo. Version 3


#include <iostream>
const int MAX=80;//funciones prototipo
int longcad(char *s);
int comparacad(char *s1, char *s2);
void copiacad(char *dest, char *orig);
using namespace std;
using namespace std;
int main() //funcads3.cpp
{
char buffer[MAX];
buffer[0]='\0';
cout<<"<1> longcad(buffer)= "<<longcad(buffer)<<endl;
copiacad(buffer, "Algoritmos y Programacion");
cout<<"<2> buffer: "<<buffer<<endl;
cout<<"<3> longcad(buffer)= "<<longcad (buffer)<<endl;
cout<<"<4> comparacad(buffer, Algoritmos y Programacion)= ";
cout<<comparacad(buffer,"Algoritmos y Programacion")<<endl;
cout<<"<5> comparacad(buffer, Algoritmos)= ";
cout<<comparacad(buffer, "Algoritmos")<<endl;

return 0; - Continua - Mg. Edgar Ruiz Lizama


}
28 22/04/2018

int longcad(char *s)


{
int i=0;
while(*s++)
++i;
return i;
}
int comparacad(char *s1, char *s2)
{
while( *s1 && *s1 ==*s2)
{
s1++;
s2++;
}
return (int)(*s1 - *s2);
}
void copiacad(char *dest, char *orig)
{
while(*dest++ = *orig++)
; - Fin -
} Mg. Edgar Ruiz Lizama
29 22/04/2018

EJECUCION DEL PROGRAMA

Mg. Edgar Ruiz Lizama


30 22/04/2018

Ejemplo:
Programa que solicita una cadena de caracteres y presenta un
reporte de la cantidad de cada vocal que existe en la cadena.

Diseño Top – Down para el programa

Mg. Edgar Ruiz Lizama


Código C++ 31 22/04/2018

#include <iostream>
#include <stdio.h>
#define N 255

// Declaracion del prototipo de las funciones


void IngresarCadena(char cad[]);
void ReportarVocales(char cad[]);
using namespace std;
int main()
{
char frase[N];
IngresarCadena(frase);
ReportarVocales(frase);
return 0;
}

// Definicion de las funciones prototipo


void IngresarCadena(char cad[])
{
cout << "Ingrese una cadena: ";
gets(cad); Mg. Edgar Ruiz Lizama
}
32 22/04/2018

void ReportarVocales(char cad[])


{ // Declarando los contadores de vocales
int ca, ce, ci, co, cu;
ca = ce = ci = co = cu = 0;
// analizar la cadena
int i = 0;
while (cad[i] != '\0')
{ switch(cad[i]){
case 'a': ca++;
break;
case 'e': ce++;
break;
case 'i': ci++;
break;
case 'o': co++;
break;
case 'u': cu++;
}
i++;
}
// Imprimiendo el reporte
cout << "\na = "<< ca << endl;
cout << "e = "<< ce << endl;
cout << "i = "<< ci << endl;
cout << "o = "<< co << endl; Mg. Edgar Ruiz Lizama
cout << "u = "<< cu << endl;
}
33 22/04/2018

Una ejecución del programa

EJERCICIO:
Modificar el programa para que también considere las vocales
en Mayúsculas-
Mg. Edgar Ruiz Lizama
34 22/04/2018

Ejemplo:
Programa que cuenta la cantidad de vocales fuertes y débiles
que existen en una cadena.

Diseño Top – Down para el programa

Mg. Edgar Ruiz Lizama


35 22/04/2018

Código C++ del programa


#include <iostream>
#define N 255

// Declaracion del prototipo de las funciones


bool EsVocalFuerte(char c);
bool EsVocalDebil(char c);
bool EsDelAlfabeto(char c);
void CuentaVocalesFuertesyDebiles(char cad[]);

using namespace std;


int main()
{
char frase[N];
cout << "Ingrese cadena: ";
cin.getline(frase, N);
CuentaVocalesFuertesyDebiles(frase);
return 0;
} Mg. Edgar Ruiz Lizama
36 22/04/2018

// Definicion de las funciones


bool EsVocalFuerte(char c)
{
switch (c)
{
case 'a': case 'e': case 'o':
case 'A': case 'E': case 'O':
return true;
}
return false;
}
bool EsVocalDebil(char c)
{
switch (c)
{
case 'i': case 'u':
case 'I': case 'U':
return true;
}
return false; Mg. Edgar Ruiz Lizama
}
37 22/04/2018
bool EsDelAlfabeto( char c )
{ if ((c >= 'a' && c <= 'z')||(c >= 'A' && c <= 'Z'))
return true;
else
return false;
}
void CuentaVocalesFuertesyDebiles( char cad[] )
{ // Declarando contadores
int cFuer = 0;
int cDebi = 0;
int i = 0;
while (cad[i] != '\0')
{ if (EsDelAlfabeto(cad[i]))
{ if (EsVocalFuerte(cad[i]))
cFuer++;
if (EsVocalDebil(cad[i]))
cDebi++;
}
i++;
}
// Presentando la salida o reporte
cout << "\nCantidad vocales fuertes: " << cFuer << endl;
cout << "\nCantidad vocales debiles: " << cDebi << endl;
Mg. Edgar Ruiz Lizama
}
38 22/04/2018

Una ejecución del programa

 EJERCICIO:
Añadir una función que cuente la cantidad de
consonantes que existen en la cadena.
Mg. Edgar Ruiz Lizama
39 22/04/2018

REFERENCIAS
 Deitel H.M. y Deitel P.J., (2009). “Como Programar en
C/C++ ". México, 2da. ed. Prentice Hall: 927p.
 Ruiz Lizama Edgar, (2009). “Programación con C++ ".
Peru, 1ra. ed. Fondo Editorial UNMSM: 434p.
 Schildt Herbert “C Manual de Referencia” España.
4ta. Edición, Osborne McGraw-Hill (2000) 709p.
 Stroustrup, Bjarne "El Lenguaje de Programación C++".
U.S.A. Addison Wesley Iberoamericana. 710 p. (1993).
 Stroustrup, Bjarne "El Lenguaje de Programación C++
Edición especial". España. Addison Wesley –
PEARSON EDUCACION S.A. 1050 p. (2002)

Mg. Edgar Ruiz Lizama