Está en la página 1de 40

OBJETIVO

El objetivo de la presente sesión es:

 Conocer datos tipo cadena


 Declaración de variables tipo cadena
 Funciones predefinidas para el manejo de cadenas
 Implementar su propias funciones de cadena
 Ejemplos de aplicación con cadenas

ALGORITMOS Y ESTRUCTURA DE DATOS 1


CADENAS
Una cadena es una secuencia de caracteres.
Estos caracteres puede ser alfabéticos, dígitos y
caracteres especiales
Los datos se almacenan en posiciones consecutivas, es
decir es un array unidimensional
0 1 2 3 4 5 6 7 8

M e g u s t a \0
Cada elemento de la cadena es un dato tipo char
Toda cadena termina con un carácter llamado carácter
fin de cadena o carácter nulo (\0)
La longitud de la cadena es el numero de caracteres que
tiene.
Una cadena es nula o vacía cuando no tiene ningún
carácter.
ALGORITMOS Y ESTRUCTURAS DE DATOS 2
CADENAS
En una cadena nula, la longitud es cero.
Si la cadena es una constante, debe estar encerrado
entre comillas dobles

Declaración de una variable tipo cadena

Para declarar una variable tipo cadena se usa la palabra


reservada char

La sintaxis es la siguiente:

char <NombreVariable>[N];

ALGORITMOS Y ESTRUCTURAS DE DATOS 3


CADENAS
Ejemplo
char cadena[30];
La declaración anterior de la cadena se muestra
esquemáticamente así.
0 1 2 3 ………………………………… 29

char producto[25]; // Declara la cadena de 25


caracteres
0 1 2 3 ………………………………… 24

ALGORITMOS Y ESTRUCTURAS DE DATOS 4


CADENAS
Asignación de datos a una variable cadena

Se puede guardar los datos al momento de declarar la


variable.
O utilizar una función predeterminadas para lectura de
datos.

La sintaxis es la siguiente:

char <NombreVariable>[N]=<datos>;

char <NombreVariable>[N]={Lista de datos};


ALGORITMOS Y ESTRUCTURAS DE DATOS 5
CADENAS
Ejemplo de asignación de datos a una variable cadena

char x[40]=“Desarrollo tecnico”;

char y[15]={‘D’,’e’,’s’,’a’,’r’,’r’,’o’,’l’,’l’,’0’,’\0’};

ALGORITMOS Y ESTRUCTURAS DE DATOS 6


FUNCIONES DE CADENAS
El c++ nos proporcionan muchas funciones estándares de
cadena que nos permite hacer operaciones con cadenas.

Las siguientes funciones requieren de la librería stdio.h y


iostream.h
Función gets()
gets(c); //Requiere librería stdio.h
Lee una cadena y lo almacena en la variable c.
Función puts()
puts(c); //Requiere librería stdio.h
Permite escribir la cadena c, automáticamente hace el
cambio de línea.
ALGORITMOS Y ESTRUCTURAS DE DATOS 7
FUNCIONES DE CADENAS
Función cin.getline()
cin.getline(c,n,’\n’); //Requiere el iostream.h
Lee una cadena de n caracteres o hasta que se pulse la
tecla enter y lo almacena en la variable c.

Ejemplo

char nom[40];
cout<<“Cual es tu nombre:”;
cin.getline(nom,40);

ALGORITMOS Y ESTRUCTURAS DE DATOS 8


FUNCIONES DE CADENAS
Las siguientes funciones requieren de la librería
string.h
Función strcpy()
strcpy(c1,c2);
Permite copiar la cadena c2 en c1, lo cual implica que
el contenido original de c1 se pierde.

char c1[]=“Programa”;
char c2[]=“Algoritmos”;
strcpy(c1,c2); // el contenido de c1 será Algoritmos

ALGORITMOS Y ESTRUCTURAS DE DATOS 9


FUNCIONES DE CADENAS
#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char c1[]="Fundamentos";
char c2[]="Teoricos";
cout<<"\nc1="<<c1<<endl;
strcpy(c1,c2);
cout<<"c1="<<c1<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 10


FUNCIONES DE CADENAS
Función strncpy()
strncpy(c1,c2,n);
Permite copiar los n primeros caracteres de la
cadena c2 en c1. Si n es mayor que la longitud de
c1, ocurre un error.
#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char c1[]="Fundamentos de programacion";
char c2[]="Teoria de grafos";
cout<<"\nc1="<<c1<<endl;
strncpy(c1,c2,6);
cout<<"c1="<<c1<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 11


FUNCIONES DE CADENAS
Función strcat()
strcat(c1,c2);
Permite concatenar la cadena c2 en c1, es decir la
longitud de la cadena c1 aumentara.

Ejemplo
char c1[30]=“Programa”;
strcat(c1,“Algoritmos”);
puts(c1);

ALGORITMOS Y ESTRUCTURAS DE DATOS 12


FUNCIONES DE CADENAS
• Función strncat()
strncat(c1,c2,n);
Permite concatenar los n primeros caracteres de
la cadena c2 en c1, lo cual implica que el
contenido original de c1 aumenta.
#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char c1[60]="Fundamentos de programacion";
char c2[]="Teoria de grafos";
cout<<"\nc1="<<c1<<endl;
strncat(c1,c2,6);
cout<<"c1="<<c1<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 13


FUNCIONES DE CADENAS
Función strcmp()
strcmp(c1,c2);
Permite comparar la cadena c1 y c2, la función
puede devolver 0, si la cadena c1 es igual a c2, 1 si
la cadena c1 es mayor que c2 o -1 si la cadena c1
es menor que c2.
#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char c2[]="Fundamentos de programacion";
char c1[]="Teoria de grafos"; cout<<endl;
if(strcmp(c1,c2)==0)
cout<<c1<<" es igual a "<<c2<<endl;
else if(strcmp(c1,c2)>0)
cout<<c1<<" es mayor que "<<c2<<endl;
else
cout<<c1<<" es menor que "<<c2<<endl;
}
ALGORITMOS Y ESTRUCTURAS DE DATOS 14
FUNCIONES DE CADENAS
Función strncmp()
strncmp(c1,c2,n);
Permite comparar hasta n caracteres de c1 con la
cadena c2, la función puede devolver 0, si la porción de
cadena c1 es igual a c2, 1 si la porción de la cadena c1
es mayor que c2 o -1 si la porción de la cadena c1 es
menor que c2.
Función strupr()
strupr(c);
Permite convertir la cadena c a mayúsculas.
Función strlwr()
strlwr(c);
Permite convertir la cadena c a minúsculas.
ALGORITMOS Y ESTRUCTURAS DE DATOS 15
FUNCIONES DE CADENAS
Función strset()
strset(c1,c);
Permite sustituir todos los caracteres de c1 por el carácter
c, excepto el carácter ‘\0’.

#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char c1[]="Fundamentos de programacion";
strset(c1,'P');
cout<<"\nc1="<<c1<<endl;
}
ALGORITMOS Y ESTRUCTURAS DE DATOS 16
FUNCIONES DE CADENAS
Función strchr()
strchr(c,c1);
Esta función devuelve un puntero de la primera
ocurrencia del carácter c1 en la cadena c, o un valor
NULL si el carácter no es encontrado.
#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char d[40], c1[]="Fundamentos de programacion";
strcpy(d,strchr(c1,'m'));
cout<<"\nc1="<<c1<<endl;
cout<<"d="<<d<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 17


FUNCIONES DE CADENAS
Función strrchr()
strrchr(c,c1);
Esta función devuelve un puntero de la ultima ocurrencia
del carácter c1 en la cadena c, o un valor NULL si el
carácter no es encontrado.
#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char d[40], c1[]="Fundamentos de programacion";
strcpy(d,strrchr(c1,'m'));
cout<<"\nc1="<<c1<<endl;
cout<<"d="<<d<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 18


FUNCIONES DE CADENAS
Función strnset()
strnset(c1,c,n);
Permite reemplazar los n primeros caracteres de c1 por
el carácter c.
#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char c1[]="Fundamentos de programacion";
strnset(c1,'r',5);
cout<<"\nc1="<<c1<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 19


FUNCIONES DE CADENAS
Función strlen()
strlen(c);
Esta función devuelve la longitud de la cadena c.

#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char c1[]="Fundamentos de programacion";
int n; n=strlen(c1);
cout<<"\nLa longitud de c1="<<n<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 20


FUNCIONES DE CADENAS
Función strtok()
strtok(c1,c);
Esta función divide la cadena c1 en una serie de tokens. Un tokens
es una secuencia de caracteres separados por delimitadores, c es
el carácter delimitador.
#include <iostream>
#include <string.h>
using namespace std;
int main ()
{ char c[]="Me gusta programar en c++";
char *p;
p=strtok (c," ");
while (p!= NULL)
{ cout<<p<<endl;
p=strtok (NULL," ");
}
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 21


FUNCIONES DE CADENAS
Función strcmpi()
strcmpi(c1,c2);
Permite comparar la cadena c1 y c2, la función puede devolver 0, si
la cadena c1 es igual a c2, 1 si la cadena c1 es mayor que c2 o -1 si
la cadena c1 es menor que c2. No hace distinción entre mayúsculas
y minúsculas.
#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char c2[]="Fundamentos";
char c1[]="FUNDAMENTOS"; cout<<endl;
if(strcmpi(c1,c2)==0)
cout<<c1<<" es igual a "<<c2<<endl;
else if(strcmp(c1,c2)>0)
cout<<c1<<" es mayor que "<<c2<<endl;
else
cout<<c1<<" es menor que "<<c2<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 22


FUNCIONES DE CADENAS
Función strstr()
strstr(c1,c2);
Esta función devuelve un puntero de la primera
ocurrencia de la cadena c2 dentro de la cadena c1, o
NULL si c2 no se encuentra en la cadena c1.
#include<iostream>
#include<string.h>
using namespace std;
// Funcion principal
int main()
{ char c1[]="Fundamentos de programacion";
char c2[]="tos";
char *c3;
c3=strstr(c1,c2);
cout<<"C3="<<c3<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 23


FUNCIONES DE CADENAS
Las siguientes funciones requieren de la librería stdlib.h

Función atoi()
atoi(c);
Convertir una cadena numérica a un numero entero.
Función atol()
atol(c);
Convertir una cadena numérica a un numero entero largo.
Función atof()
atof(c);
Convertir una cadena numérica a un numero flotante.

ALGORITMOS Y ESTRUCTURAS DE DATOS 24


FUNCIONES DE CADENAS
#include<iostream>
#include<stdlib.h>
using namespace std;
// Funcion principal
int main()
{ char c1[]="2456"; int n1;
char c2[]="21475836"; long int n2;
char c3[]="16859.5"; float n3;
n1=atoi(c1); n2=atol(c2);n3=atof(c3);
cout<<"n1="<<n1<<endl;
cout<<"n2="<<n2<<endl;
cout<<"n3="<<n3<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 25


FUNCIONES DE CARACTER
Para usar estas funciones se requiere la librería
ctype.h
Función isalpha()
isalpha(c);
Verifica si c es un carácter alfabético que esta
comprendido entre ‘A’..’Z’ o ‘a’..’z’, de ser así
devuelve verdadero, caso contrario falso.
Función isdigit()
isdigit(c);
Verifica si c es un digito (‘0’…’9’) si es verdad
devuelve verdadero, caso contrario retorna falso.

ALGORITMOS Y ESTRUCTURAS DE DATOS 26


FUNCIONES DE CARACTER
Función isupper()
isupper(c);
Verifica si c es un carácter alfabético que esta
comprendido entre ‘A’..’Z’, de ser así devuelve
verdadero, caso contrario falso.
Función islower()
islower(c);
Verifica si c es un carácter alfabético que esta
comprendido entre ‘a’…’z’, si es verdad devuelve
verdadero, caso contrario retorna falso.
Función tolower()
tolower(c);
Convierte el carácter c de mayúsculas a minúsculas.

ALGORITMOS Y ESTRUCTURAS DE DATOS 27


FUNCIONES DE CARACTER
Función toupper()
toupper(c);
Convierte el carácter c de minúsculas a mayúsculas.
Función toascii()
toascii(c);
Devuelve el código Ascii del carácter c.
Función ispunct()
ispunct(c);
Devuelve verdadero si carácter es un carácter de
puntuacion.
Función isalnum()
isalnum(c);
Devuelve verdadero si c es un carácter alfanumérico.
ALGORITMOS Y ESTRUCTURAS DE DATOS 28
FUNCIONES DE CARACTER
Requieren de la librería stdio.h y iostream.h
Función getchar()
variable=getchar();
Captura un carácter, el carácter ingresado se muestra
en pantalla, no es necesario presionar la tecla enter.
Función putchar()
putchar(c);
Escribe el carácter c.
Función cin.get()
cin.get(c);
Permite leer un carácter cualquiera.

ALGORITMOS Y ESTRUCTURAS DE DATOS 29


FUNCIONES DE CARACTER

Funcion getch() //Requieren de la librería conio.h


variable=getch();
Captura un carácter cualquiera, el carácter ingresado no se
muestra en pantalla, no e necesario presionar la tecla enter.

ALGORITMOS Y ESTRUCTURAS DE DATOS 30


FUNCIONES DE CARACTER
#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;
// Funcion principal
int main()
{ char car,car1; cout<<"Uso del getchar():";
car=getchar();
while(car!='\n')
car=getchar();
cout<<endl<<"Uso del getch():"; car1=getch();
while(car1!=13)
{cout<<car1; car1=getch();
}
cout<<endl;
}
ALGORITMOS Y ESTRUCTURAS DE DATOS 31
FUNCIONES DE CADENAS
#include <iostream>
#include <string.h>
using namespace std;
int main()
{ char c[]="Relaciones entre los objetos en una jerarquía de herencia";
char *d, p, cad[20], c1[10],c2[10];
int n;
cout<<c<<endl;
cout<<"Caracter:";
cin>>p;
cout<<"Cadena:";fflush(stdin);gets(cad);
cout<<"Ingrese cadena 1:";gets(c1);
cout<<"Ingrese cadena2:";gets(c2);
n=strcmp(c1,c2);

ALGORITMOS Y ESTRUCTURAS DE DATOS 32


FUNCIONES DE CADENAS
if(n==0)
cout<<"Las cadenas son exactamente iguales"<<endl;
else if(n>0)
cout<<"\""<<c1<<"\" es mayor que "<<"\""<<c2<<"\""<<endl;
else
cout<<"\""<<c1<<"\" es menor que "<<"\""<<c2<<"\""<<endl;

for(d=strtok(c," ");d!=NULL;)
{ cout<<d<<endl;
d=strtok(NULL," ");
}
cout<<endl;
cout<<strnset(c,'*',3)<<endl;

ALGORITMOS Y ESTRUCTURAS DE DATOS 33


FUNCIONES DE CADENAS
if(isalnum(p))
cout<<p<<" es un caracter alfanumerico"<<endl;
if(isalpha(p))
cout<<p<<" es un caracter entre A..Z, o a...z"<<endl;
else if(isdigit(p))
cout<<p<<" Es un digito que esta entre 0..9"<<endl;
else if(ispunct(p))
cout<<p<<" Es un caracter de puntuacion"<<endl;

cout<<cad<<" como numero entero es "<<atoi(cad)<<endl;

cout<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 34


FUNCIONES DE CADENAS

ALGORITMOS Y ESTRUCTURAS DE DATOS 35


PROBLEMAS CON CADENAS
// Programa que usa las funciones strchr, strrchr,strstr y
strcmpi
#include <string.h>
#include <iostream>
using namespace std;
int main()
{ char string[15], cad[15];
char *p,*q,*r, c;
cout<<"Ingrese cadena:";gets(string);
cout<<"Ingrese caracter a buscar:";cin>>c;
p = strchr(string, c);

ALGORITMOS Y ESTRUCTURAS DE DATOS 36


PROBLEMAS CON CADENAS
if(p==NULL)
cout<<"El caracter \""<<c<<"\" no se encuentra en
\""<<string<<"\"\n\n";
else
{ cout<<"\nLa cadena al cual apunta es:"<<p<<endl;
cout<<"\nLa cadena original es:"<<string<<endl;
cout<<"\nEl caracter "<<c<<" se encuentra en la posicion
"<<p-string<<endl;
}
cout<<"\nIngrese caracter a buscar:";cin>>c;
q = strrchr(string, c);

ALGORITMOS Y ESTRUCTURAS DE DATOS 37


PROBLEMAS CON CADENAS
if(q==NULL)
cout<<"El caracter \""<<c<<"\" no se encuentra en
\""<<string<<"\"\n\n";
else
{ cout<<"\nLa cadena al cual apunta es:"<<q<<endl;
cout<<"\nLa cadena original es:"<<string<<endl;
cout<<"\nEl caracter "<<c<<" se encuentra en la posicion
"<<q-string<<endl; cout<<endl;
}
cout<<"\nIngrese cadena:";
fflush(stdin);gets(cad);

ALGORITMOS Y ESTRUCTURAS DE DATOS 38


PROBLEMAS CON CADENAS
if(strcmpi(string,cad)==0)
cout<<"\""<<string<<"\" es igual a \""<<cad<<"\""<<endl;
else if(strcmpi(string,cad)>0)
cout<<"\""<<string<<"\" es mayor que \""<<cad<<"\""<<endl;
else
cout<<"\""<<string<<"\" es menor que \""<<cad<<"\""<<endl;
r = strstr(string,cad);
if(r==NULL)
cout<<"La cadena \""<<cad<<"\" no se encuentra en \""<<string<<"\"\n\n";
else
{ cout<<"\nLa cadena al cual apunta es:"<<r<<endl;
cout<<"\nLa cadena original es:"<<string<<endl;
cout<<"\nLa cadena "<<cad<<" se encuentra en la posicion "<<r-string<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 39


PROBLEMAS CON CADENAS
strset(cad,'&');
cout<<"\nAhora la cadena es:"<<"\""<<cad<<"\""<<endl<<endl;
strnset(string,'*',5);
cout<<"\nAhora la cadena es:"<<"\""<<string<<"\""<<endl<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS 40