cadenas y apuntadores programación. variables de tipo char las variables de tipo char ocupan un...

56
Cadenas y apuntadores Programación

Upload: adolpho-valdivieso

Post on 28-Jan-2016

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Cadenas y apuntadores

Programación

Page 2: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Variables de tipo char

Las variables de tipo char ocupan un byte.

Los valores posibles son de -128 a 127.

Las constantes de tipo char pueden especificarse utilizando un carácter o una secuencia de escape encerrada entre apóstrofos.

‘a’, ‘5’, ‘\n’

Pueden mezclarse con variables enteras.

char x, y;

int a,b;

x = 45; y = ‘a’; a = 2*x; b = 3*x – y;

Page 3: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Lectura de caracteresscanf (stdio.h) utilizando el formato %c. requiere presionar ENTER

getch (conio.h) no requiere de ENTER.

getchar (stdio.h) requiere presionar ENTER

#include <stdio.h>

#include <conio.h>

main(){

char p1,p2,p3=65;

printf("\ningrese un caracter: ");

p1 = getchar();

putchar(p1);

printf("\n");

printf("\nel caracteer p3 es:");

putchar(p3);

printf("\n");

printf("\ningrese otro caracter: ");

scanf("%c",&p2);

printf("%c",p2);

printf("\ningrese otro caracter: ");

p2 = getch();

printf("caracter leido: %c",p2);

getch();

}

Page 4: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Uso de fflushSe requiere borrar el buffer para leer correctamente

#include <stdio.h>

#include <conio.h>

main(){

char p1,p2,p3=65;

printf("\ningrese un caracter: ");

p1 = getchar();

putchar(p1);

printf("\n");

fflush(stdin);

printf("\nel caracteer p3 es:");

putchar(p3);

printf("\n");

printf("\ningrese otro caracter: ");

scanf("%c",&p2);

printf("%c",p2);

printf("\ningrese otro caracter: ");

fflush(stdin);

p2 = getch();

fflush(stdin);

printf("caracter leido: %c",p2);

getch();

}

Page 5: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Funciones básicas de ctype.h

Función Significado

isdigit(c)

Regresa un 1 si el argumento c es un dígito, sino regresa 0.

isalpha(c)

Regresa un 1 si el argumento c es una letra, sino regresa 0.

islower(c)

Regresa un 1 si el argumento c es una letra minúscula, sino regresa 0.

isupper(c) Regresa un 1 si el argumento c es una letra mayúscula, sino regresa 0.

tolower(c)

Regresa el carácter c convertido a minúscula.

toupper(c)

Regresa el carácter c convertido a mayúscula.

Page 6: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

ejemplo

#include <stdio.h>#include <conio.h>#include <ctype.h>

main(){ char c1,c2,c3,c4; printf("tecle un caracter: "); c1 = getch(); fflush(stdin); if(isdigit(c1)) printf("%c es un digito\n",c1); else printf("%c NO es un digito\n",c1); printf("tecle un caracter: "); c2 = getch(); fflush(stdin); if(isalpha(c2)) printf("%c es una letra\n",c2); else printf("%c NO es una letra\n",c2);

printf("tecle un caracter: "); c3 = getch(); fflush(stdin); if(isupper(c3)){ printf("%c es una letra mayuscula\n",c3); printf("La minuscula de %c es %c\n\n",c3,tolower(c3)); } if(islower(c3)){ printf("%c es una letra minuscula\n",c2); printf("La mayuscula de %c es %c\n\n",c3,toupper(c3)); } getch();}

Page 7: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo de Conversión#include <stdio.h>#include <conio.h>#include <ctype.h>char aMayuscula(char c){ if(isalpha(c)) return toupper(c); switch(c){ case 'á':return 'Á'; case 'é':return 'É'; case 'í':return 'Í'; case 'ó':return 'Ó'; case 'ú':return 'Ú'; case 'ñ':return 'Ñ'; }}main(){ printf("%c\n",aMayuscula(‘á')); getch();}

Page 8: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Función issymbol#include <stdio.h>#include <conio.h>

char issymbol(char c){ if(c<=47||c>=58&&c<=64||c>=91&&c<=96||c>=123) return 1; return 0;}

main(){ printf("%d \n",issymbol('2')); printf("%d \n",issymbol('a')); printf("%d \n",issymbol('A')); printf("%d \n",issymbol('(')); printf("%d \n",issymbol('?')); printf("%d \n",issymbol('[')); printf("%d \n",issymbol('{')); getch();}

Page 9: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

tareaEscriba una función que regrese 1 si el parámetro de tipo char es letra o número.

Page 10: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Quiz

Que valores se imprimen en la pantalla con las siguientes sentencias:

El código ASCII de ‘A’ es 65.

char a = ‘E’;

printf(“%c es una letra, su codigo ASCII es %d\n”, a, a);

printf(“%c %d”, tolower(a), isdigit(a));

Page 11: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Cadenas

Una cadena de caracteres es un arreglo unidimensional de caracteres que termina con el carácter \0.

El nombre de la variable de cadena se utiliza como un apuntador al inicio del arreglo de caracteres.

Las constantes de tipo cadena se encierran entre comillas dobles.

Ejemplos:

char a[10] = “hola”;

char m[25] = “”;

char *x = “San Luis Potosí”;

Page 12: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Declaración e inicialización#include <stdio.h>#include <conio.h>

main(){ // declara una cadena de longitud 20 como máximo. char a[20]; // declara una cadena de longitud 20 como máximo. // el contenido es la cadena “hola”, x[4] = ‘\0’. char x[10] = "hola"; // declara una cadena de 4 caracteres mas \0 char *m = "que tal"; // declara una cadena con longitud variable char s[] = {'B','i','e','n','v','e','n','i','d','o','\0'}; // declara una cadena con longitud variable char nom[] = "juan perez"; puts(x); puts(m); puts(s); puts(nom); printf("x es \"%s\", ",x); printf("m es \"%s\", ",m); printf("s es \"%s\", ",s); printf("nom es \"%s\" ",nom); getch();}

Page 13: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Lectura de cadenas#include <stdio.h>#include <conio.h>

main(){ //cadena de longitud variable char cad2[10]="hola"; char *cad0; char *cad1; cad0 = "Marruecos"; puts(cad0); cad0 = "San Luis Potosi"; puts(cad0); //lectura de cadena variable gets(cad1); puts(cad1); //lectura de cadena de longitud fija printf("%s\n",cad2); gets(cad2); puts(cad2); scanf("%s",cad2); puts(cad2); getch();}

Page 14: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Biblioteca stdlib.h

Función Significado

atoi(cad) Convierte cadena a entero

atof(cad) Convierte cadena a double

strtod(cad,&cad2) Convierte cadena a double

atol(cad) Convierte cadena a long

strtol(cad,&cad2,base) Convierte cadena a long

Page 15: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo#include <stdio.h>#include <stdlib.h>#include <conio.h>

main(){ char s1[20],*s2; int i; long l; double d; printf("introduce cadena:"); gets(s1); i = atoi(s1); l = atol(s1); d = atof(s1); printf("s1 = \"%s\"\n",s1); printf("i = %d\n",i); printf("l = %d\n",l); printf("d = %lf\n",d); l = strtol(s1,&s2,0); printf("%d, s2= %s\n",l,s2); d = strtod(s1,&s2); printf("%lf, s2= %s\n",d,s2); getch();}

Page 16: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Quiz

¿Qué función realiza la conversión especificada?

1. atol ___ convierte carácter a mayúscula

2. atod ___ convierte cadena a entero

3. atoi ___ convierte carácter a minúscula

4. tolower ___ convierte cadena a entero largo

5. toupper ___ convierte cadena a double

Page 17: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Contar caracteres

#include <stdio.h>#include <stdlib.h>#include <conio.h>

int cuenta(char s[],char c){ int i=0,cuenta=0; while(s[i]){ if(s[i]==c) cuenta++; i++; } return cuenta;}

main(){ char s[50],c; printf("Cuenta el numero de veces que aparece\nun caracter en una cadena\n"); printf("introduce cadena:"); gets(s); printf("introduce el caracter a contar:"); c = getchar(); printf("el caracter '%c' aparece %d veces\n“ , c, cuenta(s,c)); getch();}

Page 18: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Cuenta las vocales de una cadena

int cuentaVocales(char s[]){ int i=0,cuenta=0; while(s[i]){ if(tolower(s[i])=='a'|| tolower(s[i])=='e'|| tolower(s[i])=='i'|| tolower(s[i])=='o'|| tolower(s[i])=='u' ) cuenta++; i++; } return cuenta;}

Page 19: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Otra solución para contar vocales

main(){ int cuentaVocales; char s[50]; printf("Escriba cadena:"); gets(s); cuentaVocales=cuenta(s,'a')+cuenta(s,'e')+ cuenta(s,'i')+cuenta(s,'o')+cuenta(s,'u'); printf("Total de vocales %d",cuentaVocales); getch();}

Page 20: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Convierte a mayúsculas una cadena

void aMayusculas(char s[]){ int i=0; while(s[i]){ s[i] = toupper(s[i]); i++; }}

main(){ char s[50]; printf("Cuenta el número de vocales en una cadena\n"); printf("introduce cadena:"); gets(s); aMayusculas(s); printf("la cadena en mayusculas es:\n%s",s); getch();}

Page 21: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Reemplazar un carácter por otrovoid reemplaza(char s[],char c1, char c2){ int i=0; while(s[i]){ if(s[i]==c1) s[i] = c2; i++; }}main(){ char s[50],c1,c2; printf("reemplaza un caracter por otro en una cadena\n"); printf("introduce cadena:"); gets(s); printf("introduce el caracter a reemplazar:"); c1 = getchar(); fflush(stdin); printf("introduce el caracter de reemplazo:"); c2 = getchar(); reemplaza(s,c1,c2); printf("la cadena reeplazada es:\n%s",s); getch();}

Page 22: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Suma de dígitos de un número

#include <stdio.h>#include <ctype.h>#include <conio.h>

int sumaDigitos(char s[]){ int i=0,suma=0; while(s[i]){ if(isdigit(s[i])) suma += s[i]-'0'; i++; } return suma;}

main(){ int suma; char s[50]; printf("Escriba cadena:"); gets(s); suma = sumaDigitos(s); printf("Suma de digitos = %d",suma); getch();}

Page 23: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Extraer fecha del CURPEl CURP está formado por una cadena de 18 caracteres, la fecha la forman los caracteres del 5 al 10.

La siguiente función extrae el día, el mes y el año de nacimiento.

#include <stdio.h>#include <ctype.h>#include <conio.h>

void fechaCURP(char s[],int *d,int *m,int *a){ *a = 1900+(s[4]-'0')*10+(s[5]-'0'); *m = (s[6]-'0')*10+(s[7]-'0'); *d = (s[8]-'0')*10+(s[9]-'0');}

Page 24: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Actividad

Escriba una función que cambie todos los dígitos iguales a ‘0’ por la letra ‘o’ y los unos ‘1’ por letras ‘I’ de una cadena que pase como parámetro.

void reemplaza(char s[],char c1, char c2){ int i=0; while(s[i]){ if(s[i]==c1) s[i] = c2; i++; }}

Page 25: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Funciones de cadenas

Función Descripción

strcpy(cad1,cad0) Copia la cadena cad0 en la cadena cad1

strncpy(cad1,cad0,n) Copia n caracteres de la cadena cad0 en la cadena cad1

strcat(cad1,cad0) Añade una copia de cad0 al final de la cadena cad1.

strncat(cad1,cad0,n) Añade n caracteres de cad0 al final de la cadena cad1

strstr(cad1,cad0) Localiza la primera ocurrencia de la cadena cad0 en la cadena cad1, regresa el apuntador a esa cadena.

strlen(cad0) Regresa la longitud de la cadena cad0

strcmp(cad0,cad1) Compara cad0 con cad1, regresa un entero mayor, igual o menor que cero según si la cadena cad0 es mayor, igual o menor que cad2.

strchr(cad,c) Localiza la primera ocurrencia del carácter c dentro de la cadena cad y regresa el apuntador a la cadena restante.

Biblioteca string.h

Page 26: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo strcpy

#include <stdio.h>#include <conio.h>#include <string.h>

int main(){ char s2[8] = "abcdefg"; char s1[8];

strcpy( s1, s2 ); printf( "s2=%s\n", s2 ); printf( "s1=%s\n", s1 ); getch(); return 0;}

Page 27: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo strncpy

#include <stdio.h>#include <conio.h>#include <string.h>

int main(){ char s2[8] = "abcdefg"; char s1[8];

strncpy( s1, s2, 3); printf( "s2=%s\n", s2 ); printf( "s1=%s\n", s1 ); getch(); return 0;}

Page 28: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo strcat

#include <stdio.h>#include <conio.h>#include <string.h>

int main(){ char s1[11] = "Hola "; char s2[8] = "amigos";

printf( "s1=%s\t", s1 ); printf( "s2=%s\n", s2 ); strcat( s1, s2 ); printf( "s1=%s\n", s1 ); getch(); return 0;}

Page 29: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo strncat

#include <stdio.h>#include <conio.h>#include <string.h>

int main(){ char s1[11] = "Hola "; char s2[8] = "amigos";

printf( "s1=%s\t", s1 ); printf( "s2=%s\n", s2 ); strncat( s1, s2, 4); printf( "s1=%s\n", s1 ); getch(); return 0;}

Page 30: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo strstr

#include <stdio.h>#include <conio.h>#include <string.h>

int main(){ char s1[13] = "Hola a todos"; char s2[3] = "la";

printf( "s1=%s\n", s1 ); printf( "s2=%s\n", s2 ); printf( "strstr(s1,s2) = %s\n", strstr( s1, s2 ) ); getch(); return 0;}

Page 31: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo strlen

#include <stdio.h>#include <conio.h>#include <string.h>

int main(){ char s[13] = "Hola a todos";

printf( "s=%s\n", s ); printf( "strlen(s) = %d\n", strlen( s ) ); getch(); return 0;}

Page 32: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo strcmp#include <stdio.h>#include <conio.h>#include <string.h>int main(){ char s1[10] = "Abeja"; char s2[10] = "Abeja"; int i; printf( "s1=%s\t", s1 ); printf( "s2=%s\n", s2 ); i = strcmp( s1, s2 ); printf( "s1 es " ); if( i < 0 ) printf( "menor que" ); else if( i > 0 ) printf( "mayor que" ); else printf( "igual a" ); printf( " s2 (strcmp = %d)\n",i); getch(); return 0;}

Page 33: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo strchr

#include <stdio.h>#include <conio.h>#include <string.h>

int main(){ char s[20] = "Hola amigos"; char c = 'a';

printf( "s=%s\t", s ); printf( "c=%c\n", c ); printf( "strchr=%s\n", strchr( s, c ) ); getch(); return 0;}

Page 34: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo contar caracteres#include <stdio.h>#include <conio.h>#include <string.h>

int main(){ char cad1[50],cad2[50],*cad3; int i=0; printf("escriba cadeba: "); gets(cad1); printf("escriba cadeba a contar: "); gets(cad2); strcpy(cad3,cad1); //localiza la primera ocurrencia printf("AQUI"); cad3 = strstr(cad3,cad2); //licaliza las demás ocurrencias while(cad3!=NULL){ i++; cad3 = strstr(cad3+1,cad2); } printf("\nSe encontraron %d ocurrencias.\n",i); getch();}

Page 35: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

ActividadCual es la salida del siguiente programa:

#include <stdio.h>#include <conio.h>#include <string.h>

int main(){ char cad1[50]="bienvenidos a Mexico"; char cad2[50]; strcpy(cad2,cad1); printf("cad2 = %s\n",cad2); strcat(cad1,strstr(cad2,"Mex")); printf("cad1 = %s\n",cad1); strncat(cad1,cad2,10); printf("cad1 = %s\n",cad1); getch();}

Page 36: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Quiz

Escriba una sentencia utilizando las funciones de cadena para extraer las cadenas que se solicita de la cadena suministrada.

s1 = “San Luis Potosí” extraer “Luis”

Obtenga la cadena “esta es una cadena concatenada” a partir de las cadenas y las funciones de cadena (AYUDA: puede hacer llamadas anidadas de la función strcat)

s1 = “cadena ”

s2 = “concate”

s3 = “ es una ”

s4 = “esta”

strcpy(cad1,cad0)strncpy(cad1,cad0,n)strcat(cad1,cad0)strncat(cad1,cad0,n)strstr(cad1,cad0)strlen(cad0)strcmp(cad0,cad1)strchr(cad,c)

Page 37: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Arreglos de cadenas

Un arreglo de cadenas es una arreglo bidimensional de caracteres.

Podemos ver el arreglo bidimensional como un arreglo de una dimensión de cadenas de caracteres.

Se pueden utilizar las funciones revisadas anteriormente en cada elemento del arreglo.

Page 38: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ordenación de una lista de nombres

#include <stdio.h>#include <string.h>#include <conio.h>

void intercambia(char cad1[50],char cad2[50]){ char temp[50]; strcpy(temp,cad1); strcpy(cad1,cad2); strcpy(cad2,temp);}

void ordena(char lista[][50],int num){ int i,j; for(i = 0;i<num-1;i++){ for(j = i+1;j<num;j++) if(strcmp(lista[i],lista[j])>0) intercambia(lista[i],lista[j]); }}

Page 39: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

int leerLista(char lista[][50]){ int i=0,hecho=0; char s[50]; printf("Escriba los nombres (FIN=terminar)\n"); do{ gets(lista[i]); if(strcmp(lista[i],"FIN")!=0) i++; else hecho = 1; }while(!hecho); return i;}

void imprime(char lista[][50],int num){ int i; for(i = 0;i<num;i++) puts(lista[i]);}

Page 40: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

main(){ char nombres[50][50]; int total; total = leerLista(nombres); ordena(nombres,total); imprime(nombres,total); getch();}

Page 41: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Apuntadores

Una variable de tipo apuntador contiene una dirección de memoria.

La dirección de memoria señalada por el apuntador es la que contiene el dato que puede ser de cualquier tipo, incluso void.

int entero, *pentero;

entero = 548;

pentero = &entero;

*pentero = -234;

548

entero

pentero

548

entero

Asigna la dirección de entero a pentero

pentero

-234

enteroNOTA: a los apuntadores solo puede asignárseles: 0, NULL o una dirección

Page 42: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo#include <stdio.h>#include <conio.h>

main(){ int entero,*pentero; entero = 548; pentero = &entero; printf("La dirección de entero es %d\n",&entero); printf("el valor de pentero es %d\n",pentero); printf("el valor de entero es %d\n",entero); printf("el valor de *pentero es %d\n",*pentero); *pentero = -234; printf("el valor de entero es %d\n",entero); printf("el valor de *pentero es %d\n",*pentero); getch();}

Page 43: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Aritmética de apuntadoresLos apuntadores pueden utilizarse para acceder a los elementos de un arreglo.

#include <stdio.h>#include <conio.h>

main(){ int a[10]={3,4,1,8,2,3,4,5,7,0},*b; b = a;//b apunta al inicio del arreglo a printf("dirección de b es %d, el contenido es %d\n",b,*b); b = b + 1;//b apunta a a[1] printf("dirección de b es %d, el contenido es %d\n",b,*b); b = b + 3;//b apunta a a[4] printf("dirección de b es %d, el contenido es %d\n",b,*b); b = b - 2;//b apunta a a[2] printf("dirección de b es %d, el contenido es %d\n",b,*b); getch();}

Page 44: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

#include <stdio.h>#include <conio.h>

main(){ double a[10]={3,4,1,8,2,3,4,5,7,0},*b; b = a;//b apunta al inicio del arreglo a printf("dirección de b es %d, el contenido es %lf\n",b,*b); b = b + 1;//b apunta a a[1] printf("dirección de b es %d, el contenido es %lf\n",b,*b); b = b + 3;//b apunta a a[4] printf("dirección de b es %d, el contenido es %lf\n",b,*b); b = b - 2;//b apunta a a[2] printf("dirección de b es %d, el contenido es %lf\n",b,*b); getch();}

Page 45: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Apuntadores y subíndices

#include <stdio.h>#include <conio.h>

main(){ double a[10]={3,4,1,8,2,3,4,5,7,0},*b; int i; b = a;//b apunta al inicio del arreglo a for(i=0;i<10;i++) printf("a[%d]=%lf\n",i,a[i]); for(i=0;i<10;i++) printf("*(b+%d)=%lf\n",i,*(b+i)); getch();}

La aritmética de apuntadores y los subíndices son equivalentes.

Page 46: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Apuntadores a funciones

Las funciones se comportan como apuntadores.

El nombre de la función es un apuntador al inicio del código de la función.

Las funciones pueden pasarse como parámetros a otras funciones.

Page 47: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplo de apuntador a función#include <stdio.h>#include <conio.h>#include <math.h>

void tabula(double a, double b,double (*fun)(double )){ double x,y; for(x=a;x<=b;x+=(b-a)/10.0){ y = (*fun)(x); printf("f(%lf) = %lf \n",x*180/3.1416,y); }}

main(){ tabula(0,3.1416/2,sin); tabula(0,3.1416/2,cos); getch();}

Page 48: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Salida de apuntador a funciónf(0.000000) = 0.000000f(9.000000) = 0.156435f(18.000000) = 0.309018f(27.000000) = 0.453991f(36.000000) = 0.587786f(45.000000) = 0.707108f(54.000000) = 0.809018f(63.000000) = 0.891008f(72.000000) = 0.951057f(81.000000) = 0.987689f(0.000000) = 1.000000f(9.000000) = 0.987688f(18.000000) = 0.951056f(27.000000) = 0.891006f(36.000000) = 0.809016f(45.000000) = 0.707105f(54.000000) = 0.587783f(63.000000) = 0.453988f(72.000000) = 0.309014f(81.000000) = 0.156431

Page 49: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

¿Que valores tienen las variables?

int x. *px:

float y, *py;

x = 5;

px = &x;

*px = 2*x + *px;

y = x;

py = y;

y = *py + x;

printf(“*p = %d x = %d\n”,*px,x);

printf(“*p = %f x = %f\n”,*py,y);

x *px y *py

Page 50: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Suponga la siguiente declaración:

float n1 = 7.3, n2;

Escriba una sentencia para cada una de las siguientes acciones:

Declare ptrF como un apuntador a un objeto tipo float

Asigne la dirección de n1 a ptrF

Despliegue el valor del objeto apuntado por ptrF

Asigne el valor del objeto apuntado por ptrF a n2

Despliegue el valor de n2

Despliegue la dirección de n1

Despliegue la dirección almacenada en ptrF

Asigne a ptrF la dirección de n2

Asigne al valor del objeto apuntado por ptrF el valor 8.1

Despliegue el valor de n1

Despliegue el valor de n2

Page 51: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Funciones de cadenas estilo Pascal

Las siguientes funciones implementan algunas de las funciones y procedimientos utilizadas en el lenguaje Pascal. Supondremos que las cadenas están declaradas como arreglos de 256 caracteres (incluyendo el \0 de terminación).

Función Descripción

copystr extrae una subcadena de una cadena

deletestr borra una subcadena de una cadena

insert inserta una subcadena dentro de otra

pos busca una subcadena dentro de otra cadena

Page 52: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Función copystr

void copystr(char s[256],char s1[256],int n,int c){ int i,l=strlen(s1); if(l<n)s[0] = '\0'; else{ for(i=0;i<c&&i<l;i++) s[i]=s1[n+i]; s[i]='\0'; }}

Page 53: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Función deletestr

void deletestr(char s[256],int n,int c){ int i=0,l=strlen(s); if(!(l<n)) while(s[i+n]){ s[i+n]=s[i+n+c]; i++; }}

Page 54: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Función insertstr

void insertstr(char s[256],char s1[256],int n){ int i,len=strlen(s); char temp[256]; copystr(temp,s1,n,256); for(i=0;i<len&&i<255;i++) s1[i+n] = s[i]; for(i=0;i<len&&(i+n+len<255);i++) s1[i+n+len] = temp[i]; s1[i+n+len] = '\0';}

Page 55: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Función pos

int pos(char s1[256],char s2[256]){ int len1,len2,i,j1,j2; len1 = strlen(s1); len2 = strlen(s2); for(i=0;i<=len2-len1;i++){ j1 = 0; j2 = i; while(s1[j1]==s2[j2]&&s1[j1]!='\0'){ j1++; j2++; } if(j1==len1)return i; } return -1;}

Page 56: Cadenas y apuntadores Programación. Variables de tipo char Las variables de tipo char ocupan un byte. Los valores posibles son de -128 a 127. Las constantes

Ejemplomain(){ char c1[256],c2[256]; strcpy(c1,"hola tal"); printf("c1 = %s\n",c1); strcpy(c2,"que "); printf("c2 = %s\n",c2); insertstr("\"esta es una prueba \"",c1,5); printf("inserta \"esta es una prueba \" en c1 = %s\n",c1); deletestr(c1,0,8); printf("borra de 0 a 8 en c1 = %s\n",c1); deletestr(c1,10,7); printf("borra de 10 a 17 en c1 = %s\n",c1); deletestr(c1,16,5); printf("borra de 16 a 21 en c1 = %s\n",c1); printf("pos de \"una\" = %d\n",pos("una",c1)); printf("pos de \"xxx\" = %d\n",pos("xxx",c1)); printf("pos de \"tal\" = %d\n",pos("tal",c1)); getch();}