5 Cadenas C++

30
07/05/2022 Ing. Edgar Ruiz Lizama 1

Transcript of 5 Cadenas C++

Page 1: 5 Cadenas C++

07/04/2023

1 Ing. Edgar Ruiz Lizama

Page 2: 5 Cadenas C++

07/04/20232

CADENAS

Ing. Edgar Ruiz Lizama

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

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

<char> <identificador> [ <dimension> ]

'J' 'U' 'L' 'I'0

'S' 'A' \01 2 3 4 5 6

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

char nombre[20] = “JULISA ”;

Page 3: 5 Cadenas C++

07/04/20233

Ing. Edgar Ruiz Lizama

En cambio en la siguiente declaraciónchar nombre [ ] = {‘J’ ‘ u’ ‘l’ ‘ i’ ‘s’ ‘ a’};

el compilador no asigna la marca de fin de cadena al objeto nombre.

char nombre[20];cout<<”ingrese nombre”;cin>>nombre; // Rosa Alvarezcout<< nombre <<endl; //Rosa

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

R O S A A Lnombre V A R E Z

Si se quiere leer una cadena completa, debe usarse la función miembro cin.getline; tal como

cingetline (nombre, 20);

Page 4: 5 Cadenas C++

07/04/20234

Ing. Edgar Ruiz Lizama

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

FUNCIONES DE 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).

Page 5: 5 Cadenas C++

07/04/20235

Ing. Edgar Ruiz Lizama

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.

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.

Page 6: 5 Cadenas C++

07/04/20236

Ing. Edgar Ruiz Lizama

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

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

Page 7: 5 Cadenas C++

07/04/20237

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama

Page 8: 5 Cadenas C++

07/04/20238

Ing. Edgar Ruiz Lizama

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

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

Page 9: 5 Cadenas C++

07/04/20239

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama

Page 10: 5 Cadenas C++

07/04/202310

Ing. Edgar Ruiz Lizama

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

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

Page 11: 5 Cadenas C++

07/04/202311

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama

Page 12: 5 Cadenas C++

07/04/202312

Ing. Edgar Ruiz Lizama

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;

Page 13: 5 Cadenas C++

07/04/202313

Ing. Edgar Ruiz Lizama

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;

}

... Continua

Page 14: 5 Cadenas C++

07/04/202314

Ing. Edgar Ruiz Lizama

EJECUCION DEL PROGRAMA:

Page 15: 5 Cadenas C++

07/04/202315

Ing. Edgar Ruiz Lizama

//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;}

//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;}

Page 16: 5 Cadenas C++

07/04/202316

EJECUCION DEL PROGRAMA

Ing. Edgar Ruiz Lizama

Page 17: 5 Cadenas C++

07/04/202317

Ing. Edgar Ruiz Lizama

// 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;}

// 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;}

Page 18: 5 Cadenas C++

07/04/202318

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama

Page 19: 5 Cadenas C++

07/04/202319

Ing. Edgar Ruiz Lizama

// 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;}

// 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;}

Page 20: 5 Cadenas C++

07/04/202320

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama

Page 21: 5 Cadenas C++

07/04/2023

Ing. Edgar Ruiz Lizama

21

/*muestra como el usuario puede definir sus propias funciones de cadena */#include <iostream> //version 1const int MAX = 80;//funciones prototipoint 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; }

/*muestra como el usuario puede definir sus propias funciones de cadena */#include <iostream> //version 1const int MAX = 80;//funciones prototipoint 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 -

Page 22: 5 Cadenas C++

07/04/2023

Ing. Edgar Ruiz Lizama

22

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

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 -

Page 23: 5 Cadenas C++

07/04/202323

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama

Page 24: 5 Cadenas C++

07/04/2023

Ing. Edgar Ruiz Lizama

24

/*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 prototipoint 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;}

/*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 prototipoint 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 -

Page 25: 5 Cadenas C++

07/04/2023

Ing. Edgar Ruiz Lizama

25

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

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 -

Page 26: 5 Cadenas C++

07/04/202326

EJECUCION DEL PROGRAMA:

Ing. Edgar Ruiz Lizama

Page 27: 5 Cadenas C++

07/04/2023

Ing. Edgar Ruiz Lizama

27

//funciones prototipo. Version 3#include <iostream>const int MAX=80;//funciones prototipoint 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;}

//funciones prototipo. Version 3#include <iostream>const int MAX=80;//funciones prototipoint 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 -

Page 28: 5 Cadenas C++

07/04/2023

Ing. Edgar Ruiz Lizama

28

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++) ;}

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 -

Page 29: 5 Cadenas C++

07/04/202329

EJECUCION DEL PROGRAMA

Ing. Edgar Ruiz Lizama

Page 30: 5 Cadenas C++

07/04/202330

REFERENCIAS Deitel H.M. y Deitel P.J., (1995). “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)

Ing. Edgar Ruiz Lizama