9. Cadenas
Mtra. Irma Ardón
Definición de Cadena
Arreglo de Caracteres que termina en nulo ‘\0’
char nomCad[max];
Se leen con: gets(nomCad);
cin.getline(nomCad,max);
Se muestran con:
puts(nomCad);
printf(“%s”,nomCad);
cout<<nomCad;
Funciones básicas de string.h…
strcpy(destino,origen);
Copia la cadena origen en la cadena destino
strlen(cad);
Retorna la cantidad de caracteres válidos
de cad
…Funciones básicas de string.h
strcmp(cad1,cad2);
strcmpi(cad1, cad2);
Compraran cad1 y cad2, retornando:
0 si son iguales
>0 si cad1 > cad2
<0 si cad1 < cad2
strcmpi(…); no diferencía mayúsculas de
minúsculas
//Funciones de Cadenas CAD_bib.cpp Mtra Irma Ardón
#include<iostream>
#include<conio.h>
#include<string.h>
#include<stdio.h>
using namespace std;
int main(){
char
cad1[10],cad2[10],cad3[10],cad4[]={"hola"},cad5[]={"hola"},ca d6[]=
{"HOLA"},cad7[]={"HILA"};
int long1, comparacion, copia;
puts("\nINGRESE CADENA UNO: ");
gets(cad1);
puts("\nINGRESE CADENA DOS: ");
gets(cad2); //…
//LONGITUDES
long1 = strlen(cad1);
cout<<"\nLONGITUD DE LA CADENA UNO long1 = strlen(cad1);
"<<long1;
cout<<"\n\nLONGITUD DE LA CADENA DOS strlen(cad2));
"<<strlen(cad2);
//COPIADO
strcpy(cad3,cad1);
cout<<"\n\nCOPIA DE LA CADENA UNO strcpy(cad3,cad1); ";
puts(cad3);
//…
//COMPARACION
cout<<"\nVALORES RETORNADOS POR LAS FUNCIONES DE COMPARACION\n";
comparacion = strcmp(cad4,cad5);
cout<<"\nSI SON IGUALES strcmp "<<comparacion<<" PARA
"<<cad4<<", "<<cad5<<"\n";
comparacion = strcmp(cad6,cad7);
cout<<"\nSI SON DIFERENTES strcmp "<<comparacion<<" PARA
"<<cad6<<", "<<cad7<<"\n";
//….COMPARACION…
comparacion = strcmp(cad5,cad6);
cout<<"\nstrcmp HACE DIREFERNCIA ENTRE MAYUSCULAS Y MINUSCULAS: "<<comparacion<<" PARA "<<cad5<<", "
<<cad6<<"\n";
comparacion = strcmpi(cad5,cad6);
cout<<"\nstrcmpi NO HACE DIFERENCIA ENTRE MAYUSCULAS Y MINUSCULAS "<<comparacion<<" PARA "<<cad5<<", "
<<cad6<<"\n";
//….COMPARACION
comparacion = strcmp(cad7,cad6);
cout<<"\nSI SON DIFERENTES strcmp(HILA,HOLA);
"<<comparacion<<" PORQUE "<<cad7<<" ES MENOR A "<<cad6<<"\n";
comparacion = strcmp(cad6,cad7);
cout<<"\nSI SON DIFERENTES strcmp(HOLA,HILA);
"<<comparacion<<" PORQUE "<<cad6<<" ES MAYOR A "<<cad7<<"\n";
getch(); return 1;
}
Ejercicio. Prueba de Escritorio
Cadenas.cpp
//manejo de cadenas NO modular. Cadenas.cpp. Mtra Irma Ardón.
#include<iostream> #include<stdio.h> #define TAM 30 using namespace std;
int main(void){
char cad[TAM],cad2[TAM];
int opc=1;
int l,i,flag,long2;
while (opc !=0){
flag=1;
cout<<"\n1.IGUALDAD\n2.COPIADO\n0.FIN\n";
cin>>opc;
if (opc !=0){
cout<<"INGRESE LA CADENA A PROCESAR\n";
fflush(stdin);
cin.getline(cad,TAM);
for(i=0;cad[i]!='\0';i++);
l=i;
}
switch (opc){
case 1:
cout<<"INGRESE LA CADENA A COMPARAR\n";
fflush(stdin); cin.getline(cad2,TAM);
for(i=0;cad2[i]!='\0';i++);
long2=i;
if (l == long2) {
for (i=0;i<long2&&flag!=0;i++){
if (cad[i]!=cad2[i]) flag=0;
} }
if (flag==0 || l!=long2)cout<<"LAS CADENAS NO SON IGUALES";
else cout<<"LAS CADENAS SI SON IGUALES\n“; break;
case 2:
for(i=0;i<=l;i++) cad2[i]=cad[i];
cout<<"COPIA DE LA CADENA \n"<<cad2;
} }
return 0; }
//Manejo de Cadenas Modular
//Cad_arr.cpp. Mtra Irma Ardón
#include<iostream>
#define TAM 30
using namespace std;
int longitud(char cad[]) { int i;
for(i=0;cad[i]!='\0';i++); return(i);
}
void copia(char cad[],char cad2[], int l){
int i;
for(i=0;i<=l;i++) cad2[i]=cad[i];
}
void igual(char cad[], int l){
char cad2[TAM];
int flag=1,long2,i;
cout<<"INGRESE LA CADENA A COMPARAR\n";
cin.getline(cad2,TAM);
long2=longitud(cad2);
if (l == long2) {
for (i=0;i<long2&&flag!=0;i++){
if (cad[i]!=cad2[i]) flag=0;
} }
if (flag==0||l != long2)cout<<"LAS CADENAS NO SON IGUALES";
else cout<<"LAS CADENAS SI SON IGUALES\n";
}
void invierte(char cad[], int l){
char temp[1]; //por compatibilidad de tipos int i,frente,atras;
frente=0;
atras=l-1;
while (atras>=frente){
temp[0]=cad[frente];
cad[frente++]=cad[atras];
cad[atras--]=temp[0];
}
cout<<"CADENA INVERTIDA: ";
for (i=0; i < l; i++) cout<<cad[i];
}
int main(void){
char cad[TAM],cad2[TAM];
int opc=1;
int l;
while (opc !=0){
cout<<"\n1.IGUALDAD\n2.COPIADO\n3.INVERTIR\n0.FIN\n";
cin>>opc;
if (opc !=0){
cout<<"INGRESE LA CADENA A PROCESAR\n";
fflush(stdin); cin.getline(cad,TAM);
l=longitud(cad);
}
switch (opc){
case 1: igual(cad,l); break;
case 2: { copia(cad,cad2,l);
cout<<"COPIA DE LA CADENA \n"<<cad2; break;
}
case 3: invierte(cad,l); } } return 0; }