Sei sulla pagina 1di 30

C++

CADENAS
5/15/17

1 Ing. Edgar Ruiz Lizama


2 5/15/17

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

Ing. Edgar Ruiz Lizama


3 5/15/17

En cambio en la siguiente declaracin


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 slo hasta que encuentra un espacio
en blanco.
ejemplo:

no mb re 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 funcin miembro


cin.getline; tal como
cingetline (nombre, 20);
Ing. Edgar Ruiz Lizama
4 5/15/17

FUNCIONES DE MANEJO DE CADENAS


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

a) strlen().- Funcin que devuelve la cantidad de caracteres que existen en


una cadena antes del carcter nulo.

b) strupr().- Funcin que permite convertir una cadena a maysculas

c) strlwr().- Funcin que permite convertir una cadena a minsculas

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


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

Ing. Edgar Ruiz Lizama


5 5/15/17

e) strncpy (destino, origen, cantidad).- Funcin que permite copiar el


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

f) strcat (destino, origen).- Funcin que permite concatenar dos cadenas.


Una copia de la cadena origen se aade al final de la cadena destino.

g) strncat (destino, origen, cantidad).- Funcin que realiza la operacin de


concatenacin pero para un nmero de caracteres.

h) strcmp().- Funcin que permite comparar dos cadenas de caracteres.


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

Ing. Edgar Ruiz Lizama


6 5/15/17

APLICACIONES
Ejemplo
Ejemplo 1:
1:
/*el
/*el identificador
identificador cin
cin tambin
tambin lee
lee cadenas
cadenas pero
pero termina
termina oo
trunca
trunca la
la cadena
cadena al
al encontrar
encontrar el
el primer
primer espacio
espacio en
en
blanco*/
blanco*/

#include
#include <iostream>
<iostream>
using
using namespace
namespace std;
std;

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

return
return 0;
0;
}}

Ing. Edgar Ruiz Lizama


7 5/15/17

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama


8 5/15/17

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

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

return
return 0;
0;
}}

Ing. Edgar Ruiz Lizama


9 5/15/17

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama


10 5/15/17

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

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

return
return 0;
0;
}}

Ing. Edgar Ruiz Lizama


11 5/15/17

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama


12 5/15/17
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 Jess, dijo: Te
alabo, Padre, Seor 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 nios. Mateo
11,25-26";
cout<<" s1 = "<<s1<<endl<<endl;
cout<<" s2= "<<s2<<endl<<endl;

Ing. Edgar Ruiz Lizama


13 5/15/17
... 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;
}

Ing. Edgar Ruiz Lizama


14 5/15/17

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama


15 5/15/17

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

EJECUCION DEL PROGRAMA

Ing. Edgar Ruiz Lizama


17 5/15/17

//
// Escribe
Escribe el
el nombre
nombre ingresado
ingresado caracter
caracter por
por caracter
caracter

#include
#include <iostream>
<iostream>

using
using namespace
namespace std;
std;

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

return
return 0;
0;
}}

Ing. Edgar Ruiz Lizama


18 5/15/17

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama


19 5/15/17

//
// Utilizacion
Utilizacion strcpy
strcpy yy strcat.
strcat.

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

Ing. Edgar Ruiz Lizama


20 5/15/17

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama


21 5/15/17

/*muestra
/*muestra como
como el
el usuario
usuario puede
puede definir
definir sus
sus propias
propias funciones
funciones de
de
cadena */
cadena */
#include
#include <iostream>
<iostream> //version
//version 11
const
const int
int MAX
MAX == 80;//funciones
80;//funciones prototipo
prototipo
int
int longcad(char
longcad(char s[]);
s[]);
int
int comparacad(char s1[],
comparacad(char s1[], char
char s2[]);
s2[]);
void
void copiacad(char dest[], char orig[]);
copiacad(char dest[], char orig[]);
using namespace std;
using namespace std;
int
int main()
main() //funcads1.cpp
//funcads1.cpp
{{
char
char buffer[MAX];
buffer[MAX];
buffer[0]='\0';
buffer[0]='\0';
cout<<"<1>
cout<<"<1> longcad(buffer)=
longcad(buffer)= "<<longcad(buffer)<<endl;
"<<longcad(buffer)<<endl;
copiacad(buffer,
copiacad(buffer, "Algoritmos
"Algoritmos yy Programacion");
Programacion");
cout<<"<2> buffer: "<<buffer<<endl;
cout<<"<2> buffer: "<<buffer<<endl;
cout<<"<3>
cout<<"<3> longcad(buffer)=
longcad(buffer)= "<<longcad
"<<longcad (buffer)<<endl;
(buffer)<<endl;
cout<<"<4>
cout<<"<4> comparacad(buffer, Algoritmos yy Programacion)=
comparacad(buffer, Algoritmos Programacion)= ";
";
cout<<comparacad(buffer,"Algoritmos
cout<<comparacad(buffer,"Algoritmos y Programacion")<<endl ;;
y Programacion")<<endl
cout<<"<5>
cout<<"<5> comparacad(buffer,
comparacad(buffer, Algoritmos)=
Algoritmos)= ";";
cout<<comparacad(buffer, "Programacion")<<endl;
cout<<comparacad(buffer, "Programacion")<<endl;
- Continua -
return
return 0;
0; Ing. Edgar Ruiz Lizama
}}
22 5/15/17

int
int longcad(char
longcad(char s[])
s[])
{{
int
int i=0;
i=0;
while
while (s[i]!=0)
(s[i]!=0)
++i;
++i;
return
return i;i;
}}
int
int comparacad(char
comparacad(char s1[],
s1[], char
char s2[])
s2[])
{{
int
int i=0;
i=0;
for
for ( ;; s1[i]!=0
( s1[i]!=0 &&
&& s1[i]==s2[i];
s1[i]==s2[i]; i++)
i++)
;;
return
return (int)(s1[i]-s2[i]);
(int)(s1[i]-s2[i]);
}}
void
void copiacad(char
copiacad(char dest[],
dest[], char
char orig[])
orig[])
{{
int
int i=0;
i=0;
for(
for( ;; orig[i]!=0
orig[i]!=0 ;; i++)
i++)
dest[i]=orig[i];
dest[i]=orig[i]; //asignar aa dest
//asignar dest el
el caracter
caracter de de orig
orig
dest[i]=0;
dest[i]=0; - Fin -
}} Ing. Edgar Ruiz Lizama
23 5/15/17

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama


24 5/15/17

/*muestra
/*muestra como
como el
el usuario
usuario puede
puede definir
definir sus
sus propias
propias funciones
funciones de
de
cadena usa punteros al array de cadena. Version
cadena usa punteros al array de cadena. Version 2 */ 2 */
#include
#include <iostream>
<iostream>
const
const int
int MAX
MAX == 80;
80;
//funciones prototipo
//funciones prototipo
int
int longcad(char
longcad(char *s);
*s);
int
int comparacad(char *s1,
comparacad(char *s1, char
char *s2);
*s2);
void
void copiacad(char *dest, char *orig);
copiacad(char *dest, char *orig);
using namespace std;
using namespace std;
int
int main()
main() //funcads2.cpp
//funcads2.cpp
{{
char
char buffer[MAX];
buffer[MAX];
buffer[0]='\0';
buffer[0]='\0';
cout<<"<1>
cout<<"<1> longcad(buffer)=
longcad(buffer)= "<<longcad(buffer)<<endl;
"<<longcad(buffer)<<endl;
copiacad(buffer,
copiacad(buffer, "Algoritmos yy Programacion");
"Algoritmos Programacion");
cout<<"<2> buffer: "<<buffer<<endl;
cout<<"<2> buffer: "<<buffer<<endl;
cout<<"<3>
cout<<"<3> longcad(buffer)=
longcad(buffer)= "<<longcad
"<<longcad (buffer)<<endl;
(buffer)<<endl;
cout<<"<4>
cout<<"<4> comparacad(buffer, Algoritmos yy Programacion)=
comparacad(buffer, Algoritmos Programacion)= ";
";
cout<<comparacad(buffer,"Algoritmos
cout<<comparacad(buffer,"Algoritmos y Programacion")<<endl ;;
y Programacion")<<endl
cout<<"<5>
cout<<"<5> comparacad(buffer,
comparacad(buffer, Algoritmos)=
Algoritmos)= ";
";
cout<<comparacad(buffer, "Algoritmos")<<endl;
cout<<comparacad(buffer, "Algoritmos")<<endl;
return - Continua - Ing. Edgar Ruiz Lizama
return 0;
0;
}}
25 5/15/17

int
int longcad(char
longcad(char *s)*s)
{{
int
int i=0;
i=0;
while
while (s[i]!=0)
(s[i]!=0)
++i;
++i;
return
return i;i;
}}
int
int comparacad(char
comparacad(char *s1,*s1, char
char *s2)
*s2)
{{
int
int i=0;
i=0;
for(
for( ;; s1[i]!=0
s1[i]!=0 &&
&& s1[i]==s2[i];
s1[i]==s2[i]; i++)
i++)
;;
return
return (int)(s1[i]-s2[i]);
(int)(s1[i]-s2[i]);
}}
void
void copiacad(char
copiacad(char *dest,
*dest, char
char *orig)
*orig)
{{
int
int i=0;
i=0;
for(
for( ;; orig[i]!=0
orig[i]!=0 ;; i++)
i++)
dest[i]=orig[i];
dest[i]=orig[i]; //asignar aa dest
//asignar dest el
el caracter
caracter de de orig
orig
dest[i]=0;
dest[i]=0;
}} - Fin - Ing. Edgar Ruiz Lizama
26 5/15/17

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama


27 5/15/17

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

return
return 0;
0; - Continua - Ing. Edgar Ruiz Lizama
}}
28 5/15/17

int
int longcad(char
longcad(char *s)*s)
{{
int
int i=0;
i=0;
while(*s++)
while(*s++)
++i;
++i;
return
return i;
i;
}}
int
int comparacad(char
comparacad(char *s1,*s1, char
char *s2)
*s2)
{{
while(
while( *s1
*s1 &&
&& *s1
*s1 ==*s2)
==*s2)
{{
s1++;
s1++;
s2++;
s2++;
}}
return
return (int)(*s1
(int)(*s1 -- *s2);
*s2);
}}
void
void copiacad(char
copiacad(char *dest,
*dest, char
char *orig)
*orig)
{{
while(*dest++
while(*dest++ == *orig++)
*orig++)
;; - Fin -
}} Ing. Edgar Ruiz Lizama
29 5/15/17

EJECUCION DEL PROGRAMA

Ing. Edgar Ruiz Lizama


30 5/15/17

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

Ing. Edgar Ruiz Lizama

Potrebbero piacerti anche