You are on page 1of 40

CADENAS

Una cadena de caracteres es un array unidimensional en el


cual todos sus elementos son tipo char.
Ejem.:
char Obs[]=Aprobado; char color[]={g,r,i,s,\0};
0

\0

\0, es el carcter nulo en el cual c++ finaliza todas las cadenas


de caracteres.
char Obs[3]=Descontado; //Error porque el tamao de la
cadena es menor que lo declarado.
Cuando declare una variable tipo cadena, debe tener en
consideracin al carcter nulo (\0) en la longitud mxima de la
cadena.
char cadena[30]; // Declara cadena de 30 caracteres
ALGORITMOS Y ESTRUCTURAS DE DATOS

CADENAS
La declaracin anterior de la cadena se
muestra esquemticamente as.
0

29

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


0

24

ALGORITMOS Y ESTRUCTURAS DE DATOS

FUNCIONES DE CADENAS
El c++ nos proporcionan muchas funciones
estndares de cadena que nos permite hacer
operaciones con cadenas.
Las siguientes funciones requieren de la librera
string.h
Funcin 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

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

FUNCIONES DE CADENAS
Funcin 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

FUNCIONES DE CADENAS
Funcin strcat()
strcat(c1,c2);

Permite concatenar la cadena c2 en c1, es decir


la longitud de la cadena c1 aumentara.
char c1[]=Programa;strcat(c1,Algoritmos);
// el contenido de c1 ser

ALGORITMOS Y ESTRUCTURAS DE DATOS

FUNCIONES DE CADENAS
Funcin 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[]="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

FUNCIONES DE CADENAS
Funcin strcmp()
strcmp(c1,c2);

Permite comparar la cadena c1 y c2, la funcin


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

FUNCIONES DE CADENAS
Funcin strncmp()
strncmp(c1,c2,n);

Permite comparar hasta n caracteres de c1 con la


cadena c2, la funcin puede devolver 0, si la
porcin de cadena c1 es igual a c2, 1 si la porcin
de la cadena c1 es mayor que c2 o -1 si la
porcin de la cadena c1 es menor que c2.

Funcin strupr()
strupr(c);

Permite convertir la cadena c a maysculas.

Funcin strlwr()
strlwr(c);

Permite convertir la cadena c a minsculas.


ALGORITMOS Y ESTRUCTURAS DE DATOS

FUNCIONES DE CADENAS
Funcin strset()
strset(c1,c);

Permite sustituir todos los caracteres de c1 por el


carcter c, excepto el carcter \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

10

FUNCIONES DE CADENAS
Funcin strchr()
strchr(c,c1);

Esta funcin devuelve un puntero de la primera


ocurrencia del caracter c1 en la cadena c, o un valor
NULL si el carcter 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

11

FUNCIONES DE CADENAS
Funcin strrchr()
strrchr(c,c1);

Esta funcin devuelve un puntero de la ultima


ocurrencia del carcter c1 en la cadena c, o un valor
NULL si el carcter 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

12

FUNCIONES DE CADENAS
Funcin strnset()
strnset(c1,c,n);

Permite reemplazar los n primeros caracteres de c1


por el carcter 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

13

FUNCIONES DE CADENAS
Funcin strlen()
strlen(c);

Esta funcin 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

14

FUNCIONES DE CADENAS
Funcin strtok()
strtok(c1,c);

Esta funcin divide la cadena c1 en una serie de tokens. Un


tokens es una secuencia de caracteres separados por
delimitadores, c es el carcter 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

15

FUNCIONES DE CADENAS
Funcin strcmpi()
strcmpi(c1,c2);

Permite comparar la cadena c1 y c2, la funcin 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 distincin entre
maysculas y minsculas.
#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

16

FUNCIONES DE CADENAS
Funcin strstr()
strstr(c1,c2);

Esta funcin 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

17

FUNCIONES DE CADENAS
Las siguientes funciones requieren de la librera
stdlib.h
Funcin atoi()
atoi(c);
Convertir una cadena numrica a un numero entero.

Funcin atol()
atol(c);
Convertir una cadena numrica a un numero entero
largo.
Funcin atof()
atof(c);
Convertir una cadena numrica a un numero flotante.
ALGORITMOS Y ESTRUCTURAS DE DATOS

18

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

19

FUNCIONES DE CADENAS
Las siguientes funciones requieren de la librera stdio.h y
iostream.h
Funcin gets()
gets(c);
Lee una cadena y lo almacena en la variable c.
Funcin puts()
puts(c);
Permite escribir la cadena c, automticamente hace el
cambio de lnea.
Funcin cin.getline()
cin.getline(c,n,\n);
Lee una cadena de n caracteres o hasta que se pulse
la tecla enter y lo almacena en la variable c.
ALGORITMOS Y ESTRUCTURAS DE DATOS

20

FUNCIONES DE CARACTER
Para usar estas funciones se requiere la
librera ctype.h
Funcin isalpha()
isalpha(c);

Verifica si c es un carcter alfabtico que esta


comprendido entre A..Z o a..z, de ser as
devuelve verdadero, caso contrario falso.

Funcin isdigit()
isdigit(c);

Verifica si c es un digito (09) si es verdad


devuelve verdadero, caso contrario retorna falso.

ALGORITMOS Y ESTRUCTURAS DE DATOS

21

FUNCIONES DE CARACTER
Funcin isupper()
isupper(c);

Verifica si c es un carcter alfabtico que esta


comprendido entre A..Z, de ser as devuelve
verdadero, caso contrario falso.

Funcin islower()
islower(c);

Verifica si c es un carcter alfabtico que esta


comprendido entre az, si es verdad devuelve
verdadero, caso contrario retorna falso.

Funcin tolower()
tolower(c);

Convierte el carcter c de maysculas a minsculas.


ALGORITMOS Y ESTRUCTURAS DE DATOS

22

FUNCIONES DE CARACTER
Funcin toupper()
toupper(c);
Convierte el carcter c de minsculas a maysculas.
Funcin toascii()
toascii(c);
Devuelve el cdigo Ascii del carcter c.
Funcin ispunct()
ispunct(c);
Devuelve verdadero si carcter es un carcter de
puntuacion.
Funcin isalnum()
isalnum(c);
Devuelve verdadero si c es un carcter alfanumrico.
ALGORITMOS Y ESTRUCTURAS DE DATOS

23

FUNCIONES DE CARACTER
Requieren de la librera stdio.h y iostream.h
Funcin getchar()
variable=getchar();
Captura un carcter, el carcter ingresado se
muestra en pantalla, no es necesario presionar la
tecla enter.
Funcin putchar()
putchar(c);
Escribe el carcter c.
Funcin cin.get()
cin.get(c);
Permite leer un carcter cualquiera.
ALGORITMOS Y ESTRUCTURAS DE DATOS

24

FUNCIONES DE CARACTER
Funcion getch() //Requieren de la librera conio.h
variable=getch();
Captura un carcter, el carcter ingresado no se muestra en
pantalla, no e necesario presionar la tecla enter.
#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;
// Funcion principal
int main()
{ char car,car1; cout<<"Uso del getcha():";
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

25

FUNCIONES DE CADENAS
#include <iostream>
#include <string.h>
using namespace std;
int main()
{ char c[]="Relaciones entre los objetos en una jerarqua 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

26

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

27

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;
system("pause");
}
ALGORITMOS Y ESTRUCTURAS DE DATOS

28

FUNCIONES DE CADENAS

ALGORITMOS Y ESTRUCTURAS DE DATOS

29

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

30

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 "<<pstring<<endl;

}
cout<<"\nIngrese caracter a buscar:";cin>>c;

q = strrchr(string, c);

ALGORITMOS Y ESTRUCTURAS DE DATOS

31

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

32

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

33

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

34

VECTOR DE CADENAS
Es posible tambin declarar vector de cadenas, para ello
se agrega una dimensin mas.
char v[30][15];La declaracin anterior del vector de
cadena se mostrara as.
longitud de 15

0
1
2

...

29
ALGORITMOS Y ESTRUCTURAS DE DATOS

35

MATRIZ DE CADENAS
Es posible tambin declarar una matriz de cadenas, para
ello se agrega dos dimensiones mas.
char q[30][4][20];La declaracin anterior de la matriz de
cadena se mostrara as.
longitud de 20
0

0
1
2

...

29
ALGORITMOS Y ESTRUCTURAS DE DATOS

36

PROBLEMAS CON CADENAS


/* Implementar la siguiente funcion:
int GeneraVectorCadena( char c[],char nC[N][M], char car)
donde C es la cadena original, nC es el vector de cadenas a generar
y car es un caracter alfabetico cualquiera. Implementar la funcion
que genere el vector cuyo contenido sean las palabras que
empiezan con el caracter car y que devuelva la cantidad de
elementos de dicho vector. */
#include <iostream>
#include <string.h>
const int N=254,M=254;
using namespace std;
int GeneraVectorCadena( char c[],char nC[N][M], char car)
{ int i=0,x,p=0,j=0;
char k[254]; strcat(c," ");

ALGORITMOS Y ESTRUCTURAS DE DATOS

37

PROBLEMAS CON CADENAS


while((c[i]!=' ') && (c[i]!='\0'))
{ x=c[i];
if(x==car)
{ while(c[i]!=' ')
{ k[j]=c[i]; j++;i++;
}
k[j] ='\0'; strcpy(nC[p],k);k[0] ='\0'; j=0; p++;
}
else
while(c[i]!=' ')
i++;
i++;
}
return p;
}
ALGORITMOS Y ESTRUCTURAS DE DATOS

38

PROBLEMAS CON CADENAS


// Funcion que muestra el vector de cadena
void VerVector(char nC[N][M],int m)
{ int i;
for(i=0;i<m;i++)
cout<<"nC["<<i<<"]="<<nC[i]<<endl;
}

ALGORITMOS Y ESTRUCTURAS DE DATOS

39

PROBLEMAS CON CADENAS


//programa principal
int main()
{ int n;
char cadena[N],nuevaC[N][M],letra;
cout<<"Cual es la cadena....? :"<<endl;
cin.getline(cadena,N);
cout<<"Ingrese el caracter..? :";cin>>letra;
n=GeneraVectorCadena( cadena,nuevaC,letra);
if(n!=0)
{VerVector(nuevaC,n);cout<<endl<<"Tiene "<<n<<"
elementos"<<endl;}
else
cout<<"\a\nVector no generado..."<<endl;
}
ALGORITMOS Y ESTRUCTURAS DE DATOS

40

You might also like