Está en la página 1de 5

PROGRAMACIÓN

laboratorio
2007-1

PRÁCTICA 7. CADENAS DE CARACTERES

 OBJETIVOS:
Familiarizarse con la librería string.h
El alumno practicará el empleo de funciones para la manipulación de cadenas.
El alumno aprenderá a validar datos al realizar una captura.

 EQUIPO:
 Computadora
 Disco Flexible o algún otro medio para almacenar sus prácticas
 Turbo C (TC)

 G ENERALIDADES

 CADENAS DE CARACTERES

Una cadena es un conjunto de caracteres, el cual cada caracter se encuentra en una posición determinada dentro de
la cadena. Se puede utilizar una cadena general o una cadena fija de un número determinado de caracteres, estas
se declaran en el siguiente formato:

char* var_cadena; // declaración de una cadena de hasta 255 caracteres


char cadena[N]; // declaración de una cadena de N caracteres

La librería de manejo de cadenas string.h es un conjunto de funciones útiles para manipulación de datos de
cadenas, entre ellas tenemos:

Func ió n Desc rip ció n Eje mp lo Sal ida


strcpy(cad1,cad2) Sustituye el contenido strcpy(ciudad,estado); ciudad=“baja california”
de cad1 por el de cad2
strncpy(cad1,cad2,n) Copia n caracteres de strncpy(ciudad,estado,3); ciudad=“tijuanabaj”
strncpy(ciudad,”baja calif”,3);
cad2 a cad1
strcat(cad1,cad2) Agrega cad2 al final de strcat(ciudad,estado); ciudad=“tijuanasonora”
strcat(ciudad, “sonora”);
cad1
strncat(cad1,cad2,n) Agrega como máximo n strncat(ciudad,estado,4); ciudad=“tijuanabaja”
strncat(ciudad,”sinaloa”,6);
caracteres de cad2 a ciuda=“tijuanasinalo”
cad1
int strcmp(cad1,cad2) Compara cad1 con res=strncat(ciudad,estado); res tendrá valor >0
res=strncat(ciudad,”tijuana”);
cad2 res=strncat(estado,ciudad); res tendrá valor =0
Regresa 0 si son res tendrá valor <0
iguales, regresa > 0 Si
cad1 es mayor que
cad2, regresa < 0 si
cad1 es menor cad2.
La comparación es
lexicográfica, es decir,
de manera alfabética,
de A a Z, y además las
letras minúsculas son
mayores que las
mayúsculas.

1 de 5
PROGRAMACIÓN
laboratorio
2007-1

int strcmpi(cad1,cad2) Compara cad1 con res=strncat(ciudad,estado); res tendrá valor >0
res=strncat(ciudad,”TIJUANA”);
cad2 y regresa los res=strncat(estado,ciudad); res tendrá valor =0
mismos resultados res tendrá valor <0
considerandoa
mayúsculas y
minúsculas iguales.
strncmp(cad1,cad2,n) Compara n caracteres res=strncat(ciudad,”tij.bc”,3); res tendrá valor 0. Porque
de cad1 con cad2. las 3 primeras letras son
Regresa los mismos res=strncat(ciudad,”tecate”, 5); iguales
valores que strcmp. res tendrá valor diferente
a 0 porque las 5 primeras
letras no son iguales.
strlen( cad ) Determina la longitud res=strlen(ciudad); res=7
res=strlen(“UABC”);
de la cadena. res=4
strlwr( cad ) Convierte la cadena a strlwr(ciudad); ciudad=“tijuana”
minúsculas
strupr( cad ) Convierte cadena1 a strlupr(ciudad); ciudad=“TIJUANA”
mayusculas
strrev( cad ) Invierte la cadena strrev(ciudad); ciudad=“anaujit”
strset( cad, caracter) Rellena toda la cadena strset(ciudad.’x’); ciudad=“xxxxxxx”
con el caracter x
especificado

 VALIDACIÓN DE UNA CADENA

La validación de una cadena significa aceptar exclusivamente letras para capturar una palabra, y agregar el espacio
si queremos validar la captura de una frase. Igualmente se puede validar la captura de un número aceptando
únicamente dígitos.
Para declarar una cadena vacía sin caracteres se inicializa con el fin de cadena ‘\x0’ en la posición cero.
Para agregar la opción de corregir en la captura, entonces debemos validar la tecla BackSpace, cuyo caracter ASCII
es el número ocho.

 EJEMPLO #1. VALIDACIÓN EN MODO TEXTO

/ / V A LI D ACI Ó N E N MO D O T E X T O
# i nc lu d e <i o st re a m. h >
# i nc lu d e < st d io .h >
# i nc lu d e < st dl ib .h >
# i nc lu d e <c o ni o. h>
# i nc lu d e < st r i ng . h>
# i nc lu d e <c t y p e . h>
# de f i ne E NT E R 1 3
# de f i ne B kS p c 2 7

int c a p t u ra E nt e r o( ) {
int x= w he re x( ) , y = wh e r e y ( ) ;
c ha r t e c la , c a d[ 4 0] ;
int l o ng Ca d;
c a d[ 0 ] =‘\ x 0’ ;
do {
g ot o xy ( x,y ) ;
c lre ol ( ) ;
p r int f( “ % s” ,c a d) ;
t e c la =g e t c h( ) ;

2 de 5
PROGRAMACIÓN
laboratorio
2007-1

lo ng Ca d =st rl e n ( c a d ) ;
if ( i sd ig i t ( t e c la ) || t e c la = =‘- ’ && l o ng Ca d = =0 ) {
c a d [l on g Ca d + + ] =t e c la ;
c a d [l on g Ca d ] =‘ \ x 0 ’;
}
if ( t e c la = =B kSp c && l o ng Ca d> 0)
c a d[- - l o ng Ca d ] =‘\ x 0’ ;
} w hil e ( t e c la ! =E N T E R || lo ng Ca d = =0 ) ;
re t u r n a t o i( c a d) ;
}

int c a p t u ra E nt e r oP o sit i vo ( ) {
int x= w he re x( ) , y = wh e r e y ( ) ;
c ha r t e c la , c a d[ 4 0] ;
int l o ng Ca d;
c a d[ 0 ] =‘\ x 0’ ;
do {
g ot o xy ( x,y ) ;
c lre ol ( ) ;
p r int f( “ % s” ,c a d) ;
t e c la =g e t c h( ) ;
lo ng Ca d =st rl e n ( c a d ) ;
if ( i sd ig i t ( t e c la ) ) {
c a d [l on g Ca d + + ] =t e c la ;
c a d [l on g Ca d ] =‘ \ x 0 ’;
}
if ( t e c la = =B kSp c && l o ng Ca d> 0)
c a d[- - l o ng Ca d ] =‘\ x 0’ ;
} w hil e ( t e c la ! =E N T E R || lo ng Ca d = =0 ) ;
re t u r n a t o i( c a d) ;
}

floa t c a p t u ra R e a l( ) {
int x= w he re x( ) , y = wh e r e y ( ) ;
c ha r t e c la , c a d[ 4 0] ;
int l o ng Ca d;
do {
g ot o xy ( x,y ) ;
c lre ol ( ) ;
p r int f( “ % s” ,c a d) ;
t e c la =g e t c h( ) ;
lo ng Ca d =st rl e n ( c a d ) ;
if ( i sd ig i t ( t e c la ) || t e c la = =‘- ’ && l o ng Ca d = =0 ) {
c a d [l on g Ca d + + ] =t e c la ;
c a d [l on g Ca d ] =‘ \ x 0 ’;
}
if ( t e c la = =‘ .’ & & ! p u nt o ) {
p u nt o = 1;
c a d [l on g Ca d + + ] =t e c la ;
c a d [l on g Ca d ] =‘ \ x 0 ’;
}
if ( t e c la = = B kS p c & & l o ng Ca d > 0) {
p u nt o =c a d [- - l o ng Ca d ]= = ‘.’ ? 0: p u nt o;
c a d[l o ng Ca d ]= ‘\ x 0’ ;

3 de 5
PROGRAMACIÓN
laboratorio
2007-1

}
} w hil e ( t e c la ! =E nt e r || l o ng Ca d = =0 ) ;
re t u r n a t o f( c a d ) ;
}

floa t c a p t u ra R e a l( ) {
int x= w he re x( ) , y = wh e r e y ( ) ;
c ha r t e c la , c a d[ 4 0] ;
int l o ng Ca d;
do {
g ot o xy ( x,y ) ;
c lre ol ( ) ;
p r int f( “ % s” ,c a d) ;
t e c la =g e t c h( ) ;
lo ng Ca d =st rl e n ( c a d ) ;
if ( i sd ig i t ( t e c la ) ) {
c a d [l on g Ca d + + ] =t e c la ;
c a d [l on g Ca d ] =‘ \ x 0 ’;
}
if ( t e c la = =‘ .’ & & ! p u nt o ) {
p u nt o = 1;
c a d [l on g Ca d + + ] =t e c la ;
c a d [l on g Ca d ] =‘ \ x 0 ’;
}
if ( t e c la = =B kSp c && l o ng Ca d > 0) {
p u nt o =c a d [- - l o ng Ca d ]= = ‘.’ ? 0: p u nt o;
c a d[l o ng Ca d ]= ‘\ x 0’ ;
}
} w hil e ( t e c la ! =E nt e r || l o ng Ca d = =0 ) ;
re t u r n a t o f( c a d ) ;
}

vo id ma y u sc u la s( c ha r ç ç c a d) {
int x= w he re x( ) , y = wh e r e y ( ) ;
c ha r t e c la ;
int l o ng Ca d;
( ç c a d) = “ “ ;
do {
g ot o xy ( x,y ) ;
c lre ol ( ) ;
p r int f( “ % s” , ç c a d) ;
t e c la =g e t c h( ) ;
lo ng Ca d =st rl e n ( ç c a d) ;
if ( i sa l nu m( t e c la ) ) {
( ç c a d) [l o ng Ca d+ + ] =t ou p p e r( t e c la ) ;
( ç c a d) [l o ng Ca d] = NU LL ;
}
if ( t e c la = =B kSp c && l o ng Ca d > 0)
( ç c a d) [- - lo ng Ca d ] =NU L L;
} w hil e ( t e c la ! =E N T E R || lo ng Ca d = =0 ) ;
}

4 de 5
PROGRAMACIÓN
laboratorio
2007-1

/ / ç ç ç ç ç Fu nc ió n P ri nc ip a l ç ç ç ç ç ç
vo id ma i n( v oi d) {
int x;
floa t y ;
c ha r ç c a d e na ;
c lr sc r( ) ;
p r int f( “ E nt e r o: “ ) ;
x =c a p t u ra E nt e r o( ) ;
p r int f( “ \ nE l nu me r o c a p t u ra d o e s: % d\ n” , x) ;
p r int f( “ E nt e r o P o s it i v o: “ ) ;
x =c a p t u ra E nt e r oP os ( ) ;
p r int f( “ \ nE l nu me r o c a p t u ra d o e s: % d\ n” , x) ;
p r int f( “ R e a l: “ ) ;
y =c a p t u ra R e a l( ) ;
p r int f( “ \ nE l nu me r o c a p t u ra d o e s: % . 4f\ n” ,y ) ;
p r int f( “ R e a l P o sit i vo: “ ) ;
y =c a p t u ra R e a lP os ( ) ;
p r int f( “ \ nE l nu me r o c a p t u ra d o e s: % . 4f\ n” ,y ) ;
p r int f( “ Ca de na Ma y u sc u la s: “ ) ;
ma y u sc u la s( w he re x( ) ,w he re y ( ) ,& c a de na ) ;
p r int f( “ \ n La c a d e na c a p t u ra da e s: % s \ n” , c a de na ) ;
getch();
}

 ACTIVIDAD
1. Realizar un programa que dado un numero entero N entre 2 y 20 tomarlo como una base numérica, y realice lo
siguiente:
a. Conversión de base 10 a base N.
b. Conversión de base N a base 10.

Validar para que no se introduzcan dígitos que no pertenezcan al sistema a utilizar.

Salir del programa al presionar la tecla ESC una vez realizada la conversión, si se presiona la tecla ENTER
continuar realizando conversiones (preguntar si desea capturar otra base N)

Dígitos a utilizar:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J

5 de 5