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; char cadena[N];
// declaración de una cadena de hasta 255 caracteres // 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 strcpy(cad1,cad2) strncpy(cad1,cad2,n) strcat(cad1,cad2) strncat(cad1,cad2,n)
int strcmp(cad1,cad2)
Desc rip ció n Sustituye el contenido de cad1 por el de cad2 Copia n caracteres de cad2 a cad1 Agrega cad2 al final de cad1 Agrega como máximo n caracteres de cad2 a cad1 Compara cad1 con cad2 Regresa 0 si son 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.
Eje mp lo strcpy(ciudad,estado);
Sal ida ciudad=“baja california”
strncpy(ciudad,estado,3); strncpy(ciudad,”baja calif”,3);
ciudad=“tijuanabaj”
strcat(ciudad,estado); strcat(ciudad, “sonora”);
ciudad=“tijuanasonora”
strncat(ciudad,estado,4); strncat(ciudad,”sinaloa”,6);
ciudad=“tijuanabaja” ciuda=“tijuanasinalo”
res=strncat(ciudad,estado); res=strncat(ciudad,”tijuana”); res=strncat(estado,ciudad);
res tendrá valor >0 res tendrá valor =0 res tendrá valor <0
1 de 5
PROGRAMACIÓN laboratorio 2007-1
int strcmpi(cad1,cad2)
strncmp(cad1,cad2,n)
strlen( cad ) strlwr( cad ) strupr( cad ) strrev( cad ) strset( cad, caracter)
Compara cad1 con cad2 y regresa los mismos resultados considerandoa mayúsculas y minúsculas iguales. Compara n caracteres de cad1 con cad2. Regresa los mismos valores que strcmp.
res=strncat(ciudad,estado); res=strncat(ciudad,”TIJUANA”); res=strncat(estado,ciudad);
res tendrá valor >0 res tendrá valor =0 res tendrá valor <0
res=strncat(ciudad,”tij.bc”,3);
Determina la longitud de la cadena. Convierte la cadena a minúsculas Convierte cadena1 a mayusculas Invierte la cadena Rellena toda la cadena con el caracter x especificado
res=strlen(ciudad); res=strlen(“UABC”); strlwr(ciudad);
res tendrá valor 0. Porque las 3 primeras letras son iguales res tendrá valor diferente a 0 porque las 5 primeras letras no son iguales. res=7 res=4 ciudad=“tijuana”
strlupr(ciudad);
ciudad=“TIJUANA”
strrev(ciudad);
ciudad=“anaujit” ciudad=“xxxxxxx”
res=strncat(ciudad,”tecate”, 5);
strset(ciudad.’x’);
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 nc lu d e < st d io .h > # i nc lu d e < st dl ib .h > # i nc lu d e # i nc lu d e < st r i ng . h> # i nc lu d e # 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