Está en la página 1de 11

1/11

GUIA DE LABORATORIO N2
CADENAS
OBJETIVOS
Al finalizar esta prctica el usuario estar capacitado en realizar lo siguiente:
1. Reconocer y usar las funciones de cadena predefinidas del C/C++.
2. Crear funciones de cadena definidas por el programador.
3. Crear funciones que manipule vectores y matrices de cadenas.
Ejem 1
/*el identificador cin tambin lee cadenas pero termina o trunca la cadena al
encontrar el primer espacio en blanco */
#include<iostream>
using namespace std;
//Definicion de las funciones
void Leer(char c[]);
{ cout<<"Ingrese su nombre completo ";
cin>>nombre;
}
void Print( char c[])
{ cout<<"Hola, "<<c<<endl;
}
//Funcion principal
int main()
{ char nombre[35];
Leer(nombre); Print(nombre);
}
Ejem 2
/*uso de funciones para leer caracteres y cadenas en c++ se utiliza cin.get y
cin.getline respectivamente */
#include<iostream>
using namespace std;
//Definicion de las funciones
void Input(char c[])
{ cout<<"Ingrese una cadena ";
cin.getline(c,25);
}

Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

2/11
void Print( char c[])
{ cout<<"La cadena leida es = "<<c<<endl;
}
//Funcion principal
int main()
{ char cadena[25];
Input(cadena);
Print(cadena);
}
Ejem 3
/* En C++ se utiliza cin.get para leer un caracter */
#include<iostream>
using namespace std;
int LeerCaracter()
{ char x;
cout<<"Ingrese un caracter ";
cin.get(x);
return x;
}
void Print( char x)
{ cout<<"El caracter es "<<x<<endl;
}
int main()
{ char c;
c=LeerCaracter();
Print(c);
}
Ejem 4
/* Las cadenas tambin se pueden leer y escribir haciendo uso de las funciones
gets() y puts() ambas de la libreria stdio */
#include<iostream>
#include <stdio.h>
using namespace std;
//Definicion de funciones
void Entrada(char x[])
{ cout<<"Ingrese sus nombres y apellidos: ";
gets(x);
}

Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

3/11

Void VerDatos(char x[])


{ cout<<"Hola, ";
puts(c);
cout<<endl;
}
//Funcion principal
int main()
{ char c[30];
Entrada(c);
VerDatos(c);
}
Ejem 5
/* muestra como una cadena de caracteres es tratada como un array
unidimensional */
#include<iostream>
using namespace std;
//Definicion de las funciones
void CaracterPorCaracter(char c[])
{ int i; //imprimiendo cadena como un array de caracteres
cout<<"La cadena con un espacio entre caracteres:\n\n";
for(i=0; c[i]!='\0'; i++)
cout<<c[i]<<" ";
cout<<endl;
}
//Funcion principal
int main()
{ char cadena[]="ALGORITMOS Y ESTRUCTURA DE DATOS";
CaracterPorCaracter(cadena);
}
Ejem 6
//uso de las funciones strcpy y strncpy
#include <iostream>
#include <string.h>
using namespace std;
//Definicion de la function
void OperaFunciones()
{ char x[]="Universidad Nacional Mayor de San Marcos";
char y[40],z[40];
cout<<"El string en el array x es -> "<<x<<endl;
cout<<"\nEl string en el array x copiado hacia el array y es ->\n"<<strcpy(y,x);

Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

4/11
strncpy(z,x,8);
z[8]='\0'; //marca de fin de cadena
cout<<"\nParte del string en el array x copiado al array z es ->\n"<<z<<endl;

cout<<z<<endl;
}
//Funcion principal
int main()
{
OperaFunciones();
}
Ejem 7
//uso de las funciones strcat y strncat
#include <iostream>
#include <string.h>
using namespace std;
//Definicion de las funciones
void Procesar(char s1[], char s2[],char s3[])
{ strcat(s1,s2); cout<<"Concatenar s2 en s1: ";
cout<<endl<<s1;
cout<<endl; cout<<"\nConcatenar s3 en s1: "; strcat(s1,s3);
cout<<endl<<s1;
cout<<endl; cout<<"Parte de la s3 concatenada en s2: "; strncat(s2,s3,10);
cout<<endl<<s2<<endl;
}
//Funcion principal
int main()
{ char x1[100]="Con todo lo bueno que";
char x2[]=" significa heredar una biblioteca,";
char x3[]=" mejor aun es reunirla - Agustine Birrel";
Procesar(x1, x2,x3);
}
Ejem 8
#include <iostream>
#include <string.h>
using namespace std;
/* editor de texto sencillo que lee una cadena y cuenta el numero de palabras en
ella */
//Defenicion de las funciones
void Read(char c[])
{ int i=0;
cout<<"Ingrese linea de texto> ";
while((c=cin.get())!='\n')
linea[i++] = c;
Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

5/11
linea[i++]='\0';
}
void ContarPalabras(char lnea[])
{ int numpal=i=0; char blanco=' ', c,sig;
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<<"\nLa linea de texto tiene "<<numpal<<" palabras"<<endl;

}
//Funcion principal
int main()
{ char lineas[80];
Read(lineas);
ContarPalabras(lineas);
}
Ejem 9
#include <iostream>
#include <string.h>
using namespace std;
/* uso de strcmp()*/
int main()
{
char cade1[]="lenguaje C++";
char cade2[]="LENGUAJE C++";
char cade3[]="lenguaje C++";
char cade4[]="LENGuaje c++";
int result; //almacena resultado de la comparacion
//comparar cadena 1 con cadena 2
result = strcmp(cade1,cade2);
if (result<0)
cout<<cade1<<" es menor que "<<cade2<<endl;
else if (result==0)
cout<<cade1<<" es igual que "<<cade2<<endl;
else
cout<<cade1<<" es mayor que "<<cade2<<endl;
cout<<result<<endl;

Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

6/11
//comparar cadena 1 con cadena 3
result = strcmp(cade1,cade3);
if (result<0)
cout<<cade1<<" es menor que "<<cade3<<endl;
else if (result==0)
cout<<cade1<<" es igual que "<<cade3<<endl;
else
cout<<cade1<<" es mayor que "<<cade3<<endl;
cout<<result<<endl<<endl;
//comparar cadena 1 con cadena 4
result = strcmp(cade4,cade1);
if (result<0)
cout<<cade4<<" es menor que "<<cade1<<endl;
else if (result==0)
cout<<cade4<<" es igual que "<<cade1<<endl;
else
cout<<cade4<<" es mayor que "<<cade1<<endl;
cout<<result<<endl;
}

Ejem 10.
#include <iostream>
using namespace std;
int main()
{
char s[]="Estructura de Datos";
int i; cout<<"Cadena impresa con espacios en blanco entre caracteres: "<<endl;
for (i=0; i<sizeof(s)/sizeof(char); i++)
cout<<s[i]<<" "; cout<<'\0'<<endl;
}
Ejem 11.
#include <iostream>
#include <string.h> // para strupr() y strlwr()
#include <stdio.h>
int main()
{
char cade1[40], cade2[40];
cout<<"Ingrese Cadena en minusculas: ";
gets(cade1); strupr(cade1); cout<<"A mayusculas ";
puts(cade1); cout<<endl; cout<<"Ingrese Cadena en Mayusculas ";
gets(cade2); strlwr(cade2); cout<<"A minusculas: ";
puts(cade2);
cout<<endl;
}
Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

7/11

Ejem 12.
#include <iostream>
#include <string.h>
using namespace std;
const int N=254;
void LeerCadena(char c[])
{ cout<<"\nCual es la cadena"<<endl;
gets(c);
}
void PalabaBuscar(char c1[])
{ cout<<"\nCual es la palabra a buscar:";
gets(c1);cout<<endl;
}
void NumeroVeces(char clave[],int m)
{ cout<<"\n"<<clave<<" aparece en la cadena "<<m<<" veces"<<endl;
cout<<endl;
}
bool BuscarPalabra(char c[],char clave[N],int &k)
{ int i=0,j=0;
k=0;
char p[M];
strcat(c," ");
while(c[i]!='\0')
{ if(c[i]!=' ')
{ p[j]=c[i];
j++;
}
else
{ p[j]='\0';
if(strcmp(p,clave)==0)
k++;
j=0; strcpy(p,"");
}
i++;
}
if(k!=0)
return true;
else
return false;
}
// programa principal
int main()
{ char cad[N],clave[N];
Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

8/11
int num; bool q;
LeerCadena(cad);
PalabaBuscar(clave);
q=BuscarPalabra(cad,clave,num);
if(q==true)
NumeroVeces(clave,num);
else
cout<<clave<<" no esta contenida en la cadena"<<endl;
cout<<endl;
}
Ejem 13.
#include<iostream>
#include<string.h>
using namespace std;
const int N=80;
//Definicion de las funciones
void LeerCadena(char c[])
{ cout<<endl;
cout<<"Cual es la cadena:";
cin.getline(c,60);
}
void Print(char c[])
{ cout<<endl;
cout<<"La cadena es :"<<c<<endl;
cout<<endl;
}
void EliminarEspacio(char c[])
{ int i=0,j=0; char x[N];
while(c[i]!='\0')
{ if(c[i]!=' ')
{ x[j]=c[i];
j++;
}
i++;
}
x[j]='\0';strcpy(c,x);
}
// Funcion principal
int main()
{ char a[N];
LeerCadena(a);
Print(a); EliminarEspacio(a); Print(a);
}
Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

9/11
Ejem 14.
#include <iostream>
using namespace std;
const int MAX=80;
// funciones prototipo
int longcad(char s[]);
int comparacad(char s1[], char s2[]);
void copiacad(char dest[], char orig[]);
int main()
{
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,Programacion) = ";
cout<<comparacad(buffer,"Programacion")<<endl;
}
//Definiendo las funciones de usuario
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];
dest[i]=0;
}

Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

10/11

EJERCICIOS PROPUESTOS
1. Escribir un programa que permita el ingreso de una palabra, para luego
verificar si es una palabra polindroma. Una palabra es polindroma si al leer
por la izquierda y por la derecha es la misma. Ejm. radar, oso, etc.
2. Escribir un programa que acepte como entrada un texto para luego escribir
el numero de veces que se repite las letras del abecedario y genere un
grafico de barra horizontal, para graficar usar el carcter *.
3. Para el problema anterior verificar cuantas palabras existen de 1 letra, 2
letra, 3 letras, etc., para posteriormente presentar el grafico de barra
horizontal.
4. En base al problema 2, necesitamos saber el numero de veces que se
repite cada palabra, luego presentar el grafico respectivo.
5. Escribir un programa que acepte la entrada de un numero entero positivo,
para luego mostrar el mismo en letras.
6. Se almacena en una cadena la siguiente informacin en ese orden:
Descripcin del producto, cantidad, unidad comercial y precio unitario. Se
pide calcular el importe valorizado de este producto. Por ejemplo, se la
cadena Televisor LG full HD hay 23 unidades y el precio es 1200.52
soles, el importe abtener por el programa ser: 27611.96. No utilizar
ninguna funcin estndar para manejo de cadenas. Implementar el
programa, debe plantear usando su propias funciones.
7. Supongo que usted conoce cuales son las capitales ms importantes de los
pases del mundo. De no ser as, este es su oportunidad de recordar y por
lo tanto tendr una excelente ayuda en casa. La aplicacin que debe
desarrollar consiste en almacenar la siguiente informacin: Nombre de pas,
capital y poblacin de todos los pases de nuestro planeta. Al ejecutar el
programa el sistema debe presentarle el siguiente men de opciones.
SISTEMA DE PAISES VERSUS CAPITALES
***********************************************
1. America
2. Europa
3. Africa
4. Asia
5. Oceana
6. Estadstica
7. Terminar
Digite su opcion [1 7]:
El sistema consiste en un juego que usted debe adivinar la capital del pas
mostrado en pantalla, para ello debe elegir cualquiera de las opciones del 1
al 5, inmediatamente el programa mostrara el nombre del pas seguido de
Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

11/11
una pregunta Que capital tiene: ?, a la misma usted debe responder con
la respuesta, inmediatamente el sistema debe mostrarle el mensaje de
felicitaciones ud, conoce geografa , la poblacin es: 2548560 habitantes y
se har acreedor de un punto a su favor, luego le pregunta si desea seguir
con el juego, si contesta afirmativamente, saldr otro pas y el proceso
sigue repitindose. Si a la interrogante anterior usted contesta con no, el
sistema le muestra el men principal.
Si la respuesta es errada a la capital de un pas, el sistema le muestra el
siguiente mensaje ...Reflexione antes de responder por favor, y tendr 2
oportunidades mas. Si en el segundo intento falla, el sistema le restara
medio punto, dndole la ultima oportunidad, si en este ultimo se equivoca el
sistema displaya el mensaje Lo siento, usted de repasar geografa y
termina el juego para retornar al men principal.
Al elegir la opcin estadstica, debe mostrarle la cantidad de puntos
acumulados y perdidos y su puntaje final obtenido.
Finalmente la opcin terminar, finaliza la sesin de trabajo.

Algoritmos y Estructura de Datos

Ing. Flix Huari Evangelista

También podría gustarte