SlideShare una empresa de Scribd logo
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 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;
Lectura de caracteres
scanf (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();
}
Uso de fflush
Se 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();
}
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.
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 digiton",c1);
else
printf("%c NO es un digiton",c1);
printf("tecle un caracter: ");
c2 = getch();
fflush(stdin);
if(isalpha(c2))
printf("%c es una letran",c2);
else
printf("%c NO es una letran",c2);
printf("tecle un caracter: ");
c3 = getch();
fflush(stdin);
if(isupper(c3)){
printf("%c es una letra
mayusculan",c3);
printf("La minuscula de %c es
%cnn",c3,tolower(c3));
}
if(islower(c3)){
printf("%c es una letra
minusculan",c2);
printf("La mayuscula de %c es
%cnn",c3,toupper(c3));
}
getch();
}
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("%cn",aMayuscula(‘á'));
getch();
}
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();
}
tarea
Escriba una función que regrese 1 si el parámetro de tipo char es letra
o número.
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 %dn”, a, a);
printf(“%c %d”, tolower(a), isdigit(a));
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í”;
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();
}
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("%sn",cad2);
gets(cad2);
puts(cad2);
scanf("%s",cad2);
puts(cad2);
getch();
}
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
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 = %dn",i);
printf("l = %dn",l);
printf("d = %lfn",d);
l = strtol(s1,&s2,0);
printf("%d, s2= %sn",l,s2);
d = strtod(s1,&s2);
printf("%lf, s2= %sn",d,s2);
getch();
}
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
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 aparecenun caracter en
una cadenan");
printf("introduce cadena:");
gets(s);
printf("introduce el caracter a
contar:");
c = getchar();
printf("el caracter '%c'
aparece %d vecesn“ , c,
cuenta(s,c));
getch();
}
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;
}
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();
}
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 cadenan");
printf("introduce cadena:");
gets(s);
aMayusculas(s);
printf("la cadena en mayusculas es:n%s",s);
getch();
}
Reemplazar un carácter por otro
void 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 cadenan");
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();
}
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();
}
Extraer fecha del CURP
El 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');
}
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++;
}
}
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
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=%sn", s2 );
printf( "s1=%sn", s1 );
getch();
return 0;
}
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=%sn", s2 );
printf( "s1=%sn", s1 );
getch();
return 0;
}
Ejemplo strcat
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char s1[11] = "Hola ";
char s2[8] = "amigos";
printf( "s1=%st", s1 );
printf( "s2=%sn", s2 );
strcat( s1, s2 );
printf( "s1=%sn", s1 );
getch();
return 0;
}
Ejemplo strncat
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char s1[11] = "Hola ";
char s2[8] = "amigos";
printf( "s1=%st", s1 );
printf( "s2=%sn", s2 );
strncat( s1, s2, 4);
printf( "s1=%sn", s1 );
getch();
return 0;
}
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=%sn", s1 );
printf( "s2=%sn", s2 );
printf( "strstr(s1,s2) = %sn", strstr( s1, s2 ) );
getch();
return 0;
}
Ejemplo strlen
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char s[13] = "Hola a todos";
printf( "s=%sn", s );
printf( "strlen(s) = %dn", strlen( s ) );
getch();
return 0;
}
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=%st", s1 );
printf( "s2=%sn", 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;
}
Ejemplo strchr
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char s[20] = "Hola amigos";
char c = 'a';
printf( "s=%st", s );
printf( "c=%cn", c );
printf( "strchr=%sn", strchr( s, c ) );
getch();
return 0;
}
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();
}
Actividad
Cual 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 = %sn",cad2);
strcat(cad1,strstr(cad2,"Mex"));
printf("cad1 = %sn",cad1);
strncat(cad1,cad2,10);
printf("cad1 = %sn",cad1);
getch();
}
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)
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.
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]);
}
}
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]);
}
main(){
char nombres[50][50];
int total;
total = leerLista(nombres);
ordena(nombres,total);
imprime(nombres,total);
getch();
}
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
entero
NOTA: a los apuntadores solo
puede asignárseles: 0, NULL o
una dirección
Ejemplo
#include <stdio.h>
#include <conio.h>
main(){
int entero,*pentero;
entero = 548;
pentero = &entero;
printf("La dirección de entero es %dn",&entero);
printf("el valor de pentero es %dn",pentero);
printf("el valor de entero es %dn",entero);
printf("el valor de *pentero es %dn",*pentero);
*pentero = -234;
printf("el valor de entero es %dn",entero);
printf("el valor de *pentero es %dn",*pentero);
getch();
}
Aritmética de apuntadores
Los 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 %dn",b,*b);
b = b + 1;//b apunta a a[1]
printf("dirección de b es %d, el contenido es %dn",b,*b);
b = b + 3;//b apunta a a[4]
printf("dirección de b es %d, el contenido es %dn",b,*b);
b = b - 2;//b apunta a a[2]
printf("dirección de b es %d, el contenido es %dn",b,*b);
getch();
}
#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 %lfn",b,*b);
b = b + 1;//b apunta a a[1]
printf("dirección de b es %d, el contenido es %lfn",b,*b);
b = b + 3;//b apunta a a[4]
printf("dirección de b es %d, el contenido es %lfn",b,*b);
b = b - 2;//b apunta a a[2]
printf("dirección de b es %d, el contenido es %lfn",b,*b);
getch();
}
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]=%lfn",i,a[i]);
for(i=0;i<10;i++)
printf("*(b+%d)=%lfn",i,*(b+i));
getch();
}
La aritmética de apuntadores y los subíndices son equivalentes.
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.
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();
}
Salida de apuntador a función
f(0.000000) = 0.000000
f(9.000000) = 0.156435
f(18.000000) = 0.309018
f(27.000000) = 0.453991
f(36.000000) = 0.587786
f(45.000000) = 0.707108
f(54.000000) = 0.809018
f(63.000000) = 0.891008
f(72.000000) = 0.951057
f(81.000000) = 0.987689
f(0.000000) = 1.000000
f(9.000000) = 0.987688
f(18.000000) = 0.951056
f(27.000000) = 0.891006
f(36.000000) = 0.809016
f(45.000000) = 0.707105
f(54.000000) = 0.587783
f(63.000000) = 0.453988
f(72.000000) = 0.309014
f(81.000000) = 0.156431
¿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 = %dn”,*px,x);
printf(“*p = %f x = %fn”,*py,y);
x *px y *py
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
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
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';
}
}
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++;
}
}
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';
}
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;
}
Ejemplo
main(){
char c1[256],c2[256];
strcpy(c1,"hola tal");
printf("c1 = %sn",c1);
strcpy(c2,"que ");
printf("c2 = %sn",c2);
insertstr(""esta es una prueba "",c1,5);
printf("inserta "esta es una prueba " en c1 = %sn",c1);
deletestr(c1,0,8);
printf("borra de 0 a 8 en c1 = %sn",c1);
deletestr(c1,10,7);
printf("borra de 10 a 17 en c1 = %sn",c1);
deletestr(c1,16,5);
printf("borra de 16 a 21 en c1 = %sn",c1);
printf("pos de "una" = %dn",pos("una",c1));
printf("pos de "xxx" = %dn",pos("xxx",c1));
printf("pos de "tal" = %dn",pos("tal",c1));
getch();
}

Más contenido relacionado

La actualidad más candente

Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.
Ana Castro
 
Unidad2 programas while , do while y for
Unidad2 programas while , do while  y forUnidad2 programas while , do while  y for
Unidad2 programas while , do while y for
Miguel Angel Peña
 
Prueba de series (exposición)
Prueba de series (exposición)Prueba de series (exposición)
Prueba de series (exposición)
Héctor Pérez
 
Ejercicios de programación en C (Estructuras condicionales-Selectivas)
Ejercicios de programación en C (Estructuras condicionales-Selectivas)Ejercicios de programación en C (Estructuras condicionales-Selectivas)
Ejercicios de programación en C (Estructuras condicionales-Selectivas)
Maynor Mendoza
 
Pointers in C/C++ Programming
Pointers in C/C++ ProgrammingPointers in C/C++ Programming
Pointers in C/C++ Programming
Faisal Shahzad Khan
 
Comandos importantes en c++
Comandos importantes en c++Comandos importantes en c++
Comandos importantes en c++
Andy Otañez
 
Multiplexor 4 Entradas 1 Salida (4-1)
Multiplexor 4 Entradas 1 Salida (4-1)Multiplexor 4 Entradas 1 Salida (4-1)
Multiplexor 4 Entradas 1 Salida (4-1)
251089luis
 
Hashing
HashingHashing
Software omegaup
Software omegaupSoftware omegaup
Software omegaup
michelle_ocampo
 
Estructura repetitiva for y while
Estructura repetitiva for y whileEstructura repetitiva for y while
Estructura repetitiva for y while
Junior Solano de Arco
 
Ejercicios de matrices y vectores en c++
Ejercicios de matrices y vectores en c++Ejercicios de matrices y vectores en c++
Ejercicios de matrices y vectores en c++
Diego Maxdj Chicaiza
 
Pointer in C
Pointer in CPointer in C
Pointer in C
Sonya Akter Rupa
 
ESTRUCTURAS ANIDADAS
ESTRUCTURAS ANIDADASESTRUCTURAS ANIDADAS
ESTRUCTURAS ANIDADAS
Carlos Gabriel Tipula Yanapa
 
Overview of C Mrs Sowmya Jyothi
Overview of C Mrs Sowmya JyothiOverview of C Mrs Sowmya Jyothi
Overview of C Mrs Sowmya Jyothi
Sowmya Jyothi
 
STRUCTURE AND UNION IN C MRS.SOWMYA JYOTHI.pdf
STRUCTURE AND UNION IN C MRS.SOWMYA JYOTHI.pdfSTRUCTURE AND UNION IN C MRS.SOWMYA JYOTHI.pdf
STRUCTURE AND UNION IN C MRS.SOWMYA JYOTHI.pdf
SowmyaJyothi3
 
Distribuciones Muestrales y Estimación de los Parámetros de una Población
Distribuciones Muestrales y Estimación de los Parámetros de una PoblaciónDistribuciones Muestrales y Estimación de los Parámetros de una Población
Distribuciones Muestrales y Estimación de los Parámetros de una Población
josegonzalez1606
 
Vhdl organización y arquitectura
Vhdl organización y arquitectura Vhdl organización y arquitectura
Vhdl organización y arquitectura
Juan S V
 
Programa en java con el Metodo de la burbuja
Programa en java con el Metodo de la burbujaPrograma en java con el Metodo de la burbuja
Programa en java con el Metodo de la burbuja
LupitaOMG Garmendia
 
5.1 estructura de una clase.
5.1 estructura de una clase.5.1 estructura de una clase.
5.1 estructura de una clase.
K Manuel TN
 
Funciones en C++
Funciones en C++Funciones en C++
Funciones en C++
ANDRES FELIPE CRUZ ERAZO
 

La actualidad más candente (20)

Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.
 
Unidad2 programas while , do while y for
Unidad2 programas while , do while  y forUnidad2 programas while , do while  y for
Unidad2 programas while , do while y for
 
Prueba de series (exposición)
Prueba de series (exposición)Prueba de series (exposición)
Prueba de series (exposición)
 
Ejercicios de programación en C (Estructuras condicionales-Selectivas)
Ejercicios de programación en C (Estructuras condicionales-Selectivas)Ejercicios de programación en C (Estructuras condicionales-Selectivas)
Ejercicios de programación en C (Estructuras condicionales-Selectivas)
 
Pointers in C/C++ Programming
Pointers in C/C++ ProgrammingPointers in C/C++ Programming
Pointers in C/C++ Programming
 
Comandos importantes en c++
Comandos importantes en c++Comandos importantes en c++
Comandos importantes en c++
 
Multiplexor 4 Entradas 1 Salida (4-1)
Multiplexor 4 Entradas 1 Salida (4-1)Multiplexor 4 Entradas 1 Salida (4-1)
Multiplexor 4 Entradas 1 Salida (4-1)
 
Hashing
HashingHashing
Hashing
 
Software omegaup
Software omegaupSoftware omegaup
Software omegaup
 
Estructura repetitiva for y while
Estructura repetitiva for y whileEstructura repetitiva for y while
Estructura repetitiva for y while
 
Ejercicios de matrices y vectores en c++
Ejercicios de matrices y vectores en c++Ejercicios de matrices y vectores en c++
Ejercicios de matrices y vectores en c++
 
Pointer in C
Pointer in CPointer in C
Pointer in C
 
ESTRUCTURAS ANIDADAS
ESTRUCTURAS ANIDADASESTRUCTURAS ANIDADAS
ESTRUCTURAS ANIDADAS
 
Overview of C Mrs Sowmya Jyothi
Overview of C Mrs Sowmya JyothiOverview of C Mrs Sowmya Jyothi
Overview of C Mrs Sowmya Jyothi
 
STRUCTURE AND UNION IN C MRS.SOWMYA JYOTHI.pdf
STRUCTURE AND UNION IN C MRS.SOWMYA JYOTHI.pdfSTRUCTURE AND UNION IN C MRS.SOWMYA JYOTHI.pdf
STRUCTURE AND UNION IN C MRS.SOWMYA JYOTHI.pdf
 
Distribuciones Muestrales y Estimación de los Parámetros de una Población
Distribuciones Muestrales y Estimación de los Parámetros de una PoblaciónDistribuciones Muestrales y Estimación de los Parámetros de una Población
Distribuciones Muestrales y Estimación de los Parámetros de una Población
 
Vhdl organización y arquitectura
Vhdl organización y arquitectura Vhdl organización y arquitectura
Vhdl organización y arquitectura
 
Programa en java con el Metodo de la burbuja
Programa en java con el Metodo de la burbujaPrograma en java con el Metodo de la burbuja
Programa en java con el Metodo de la burbuja
 
5.1 estructura de una clase.
5.1 estructura de una clase.5.1 estructura de una clase.
5.1 estructura de una clase.
 
Funciones en C++
Funciones en C++Funciones en C++
Funciones en C++
 

Similar a Cadenas y punteros.ppt

08 strings o cadenas
08 strings o cadenas08 strings o cadenas
08 strings o cadenas
horusblom
 
Practicas c++
Practicas c++Practicas c++
Practicas c++
Jhonathan Villalobos
 
Practicas c++
Practicas c++Practicas c++
Practicas c++
Jhonathan Villalobos
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
Jhonathan Villalobos
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
Jhonathan Villalobos
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
Jhonathan Villalobos
 
Practicas segundo parcial de programacion avanzada
Practicas segundo parcial de programacion avanzadaPracticas segundo parcial de programacion avanzada
Practicas segundo parcial de programacion avanzada
Dariio Lopezz Young
 
Ejercicios programacion cortos
Ejercicios programacion cortosEjercicios programacion cortos
Ejercicios programacion cortos
milanollarves
 
Fpr Tema6 www.fresymetal.com
Fpr Tema6 www.fresymetal.comFpr Tema6 www.fresymetal.com
Fpr Tema6 www.fresymetal.com
FresyMetal
 
Deber de programación
Deber de programación  Deber de programación
Deber de programación
legnasilvana
 
Programación 1: cadenas en C
Programación 1: cadenas en CProgramación 1: cadenas en C
Programación 1: cadenas en C
Angel Vázquez Patiño
 
PROBLEMAS DE POGRAMACION 1
PROBLEMAS DE POGRAMACION 1PROBLEMAS DE POGRAMACION 1
PROBLEMAS DE POGRAMACION 1
Jordan Puente
 
Fpr Tema 4 www.fresymetal.com
Fpr Tema 4 www.fresymetal.comFpr Tema 4 www.fresymetal.com
Fpr Tema 4 www.fresymetal.com
FresyMetal
 
El lenguaje c
El lenguaje cEl lenguaje c
El lenguaje c
Grisell d?z
 
El lenguaje c
El lenguaje cEl lenguaje c
El lenguaje c
Grisell d?z
 
Practicas de programacion 11 20
Practicas de programacion 11 20Practicas de programacion 11 20
Practicas de programacion 11 20
Dariio Lopezz Young
 
Taller 1 de estructuras
Taller 1 de estructurasTaller 1 de estructuras
Taller 1 de estructuras
Paola Rodriguez
 
Laboratorio1 entrada-salida de datos / Lenguance C
Laboratorio1   entrada-salida de datos / Lenguance CLaboratorio1   entrada-salida de datos / Lenguance C
Laboratorio1 entrada-salida de datos / Lenguance C
Alejandro Enrique Téllez López
 
Aritmetica
AritmeticaAritmetica
Aritmetica
BOTICA
 
Funciones str
Funciones strFunciones str
Funciones str
Sharliemaster
 

Similar a Cadenas y punteros.ppt (20)

08 strings o cadenas
08 strings o cadenas08 strings o cadenas
08 strings o cadenas
 
Practicas c++
Practicas c++Practicas c++
Practicas c++
 
Practicas c++
Practicas c++Practicas c++
Practicas c++
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Codigos de programas
Codigos de programasCodigos de programas
Codigos de programas
 
Practicas segundo parcial de programacion avanzada
Practicas segundo parcial de programacion avanzadaPracticas segundo parcial de programacion avanzada
Practicas segundo parcial de programacion avanzada
 
Ejercicios programacion cortos
Ejercicios programacion cortosEjercicios programacion cortos
Ejercicios programacion cortos
 
Fpr Tema6 www.fresymetal.com
Fpr Tema6 www.fresymetal.comFpr Tema6 www.fresymetal.com
Fpr Tema6 www.fresymetal.com
 
Deber de programación
Deber de programación  Deber de programación
Deber de programación
 
Programación 1: cadenas en C
Programación 1: cadenas en CProgramación 1: cadenas en C
Programación 1: cadenas en C
 
PROBLEMAS DE POGRAMACION 1
PROBLEMAS DE POGRAMACION 1PROBLEMAS DE POGRAMACION 1
PROBLEMAS DE POGRAMACION 1
 
Fpr Tema 4 www.fresymetal.com
Fpr Tema 4 www.fresymetal.comFpr Tema 4 www.fresymetal.com
Fpr Tema 4 www.fresymetal.com
 
El lenguaje c
El lenguaje cEl lenguaje c
El lenguaje c
 
El lenguaje c
El lenguaje cEl lenguaje c
El lenguaje c
 
Practicas de programacion 11 20
Practicas de programacion 11 20Practicas de programacion 11 20
Practicas de programacion 11 20
 
Taller 1 de estructuras
Taller 1 de estructurasTaller 1 de estructuras
Taller 1 de estructuras
 
Laboratorio1 entrada-salida de datos / Lenguance C
Laboratorio1   entrada-salida de datos / Lenguance CLaboratorio1   entrada-salida de datos / Lenguance C
Laboratorio1 entrada-salida de datos / Lenguance C
 
Aritmetica
AritmeticaAritmetica
Aritmetica
 
Funciones str
Funciones strFunciones str
Funciones str
 

Último

Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
micarnavaltupatrimon
 
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
Maria Celeste Trujillo Cruz
 
Introduccion al Lenguaje de Programación C++
Introduccion al Lenguaje de Programación  C++Introduccion al Lenguaje de Programación  C++
Introduccion al Lenguaje de Programación C++
PaulDelgadoSoto
 
primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
eliersin13
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
micarnavaltupatrimon
 
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptxTARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
dayronfabricioruizmo
 
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcelherramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
Eduardo455921
 

Último (7)

Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
 
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
 
Introduccion al Lenguaje de Programación C++
Introduccion al Lenguaje de Programación  C++Introduccion al Lenguaje de Programación  C++
Introduccion al Lenguaje de Programación C++
 
primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
 
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptxTARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
 
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcelherramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
 

Cadenas y punteros.ppt

  • 2. 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;
  • 3. Lectura de caracteres scanf (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(); }
  • 4. Uso de fflush Se 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(); }
  • 5. 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.
  • 6. 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 digiton",c1); else printf("%c NO es un digiton",c1); printf("tecle un caracter: "); c2 = getch(); fflush(stdin); if(isalpha(c2)) printf("%c es una letran",c2); else printf("%c NO es una letran",c2); printf("tecle un caracter: "); c3 = getch(); fflush(stdin); if(isupper(c3)){ printf("%c es una letra mayusculan",c3); printf("La minuscula de %c es %cnn",c3,tolower(c3)); } if(islower(c3)){ printf("%c es una letra minusculan",c2); printf("La mayuscula de %c es %cnn",c3,toupper(c3)); } getch(); }
  • 7. 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("%cn",aMayuscula(‘á')); getch(); }
  • 8. 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(); }
  • 9. tarea Escriba una función que regrese 1 si el parámetro de tipo char es letra o número.
  • 10. 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 %dn”, a, a); printf(“%c %d”, tolower(a), isdigit(a));
  • 11. 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í”;
  • 12. 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(); }
  • 13. 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("%sn",cad2); gets(cad2); puts(cad2); scanf("%s",cad2); puts(cad2); getch(); }
  • 14. 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
  • 15. 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 = %dn",i); printf("l = %dn",l); printf("d = %lfn",d); l = strtol(s1,&s2,0); printf("%d, s2= %sn",l,s2); d = strtod(s1,&s2); printf("%lf, s2= %sn",d,s2); getch(); }
  • 16. 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
  • 17. 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 aparecenun caracter en una cadenan"); printf("introduce cadena:"); gets(s); printf("introduce el caracter a contar:"); c = getchar(); printf("el caracter '%c' aparece %d vecesn“ , c, cuenta(s,c)); getch(); }
  • 18. 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; }
  • 19. 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(); }
  • 20. 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 cadenan"); printf("introduce cadena:"); gets(s); aMayusculas(s); printf("la cadena en mayusculas es:n%s",s); getch(); }
  • 21. Reemplazar un carácter por otro void 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 cadenan"); 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(); }
  • 22. 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(); }
  • 23. Extraer fecha del CURP El 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'); }
  • 24. 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++; } }
  • 25. 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
  • 26. 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=%sn", s2 ); printf( "s1=%sn", s1 ); getch(); return 0; }
  • 27. 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=%sn", s2 ); printf( "s1=%sn", s1 ); getch(); return 0; }
  • 28. Ejemplo strcat #include <stdio.h> #include <conio.h> #include <string.h> int main() { char s1[11] = "Hola "; char s2[8] = "amigos"; printf( "s1=%st", s1 ); printf( "s2=%sn", s2 ); strcat( s1, s2 ); printf( "s1=%sn", s1 ); getch(); return 0; }
  • 29. Ejemplo strncat #include <stdio.h> #include <conio.h> #include <string.h> int main() { char s1[11] = "Hola "; char s2[8] = "amigos"; printf( "s1=%st", s1 ); printf( "s2=%sn", s2 ); strncat( s1, s2, 4); printf( "s1=%sn", s1 ); getch(); return 0; }
  • 30. 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=%sn", s1 ); printf( "s2=%sn", s2 ); printf( "strstr(s1,s2) = %sn", strstr( s1, s2 ) ); getch(); return 0; }
  • 31. Ejemplo strlen #include <stdio.h> #include <conio.h> #include <string.h> int main() { char s[13] = "Hola a todos"; printf( "s=%sn", s ); printf( "strlen(s) = %dn", strlen( s ) ); getch(); return 0; }
  • 32. 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=%st", s1 ); printf( "s2=%sn", 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; }
  • 33. Ejemplo strchr #include <stdio.h> #include <conio.h> #include <string.h> int main() { char s[20] = "Hola amigos"; char c = 'a'; printf( "s=%st", s ); printf( "c=%cn", c ); printf( "strchr=%sn", strchr( s, c ) ); getch(); return 0; }
  • 34. 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(); }
  • 35. Actividad Cual 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 = %sn",cad2); strcat(cad1,strstr(cad2,"Mex")); printf("cad1 = %sn",cad1); strncat(cad1,cad2,10); printf("cad1 = %sn",cad1); getch(); }
  • 36. 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)
  • 37. 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.
  • 38. 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]); } }
  • 39. 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]); }
  • 40. main(){ char nombres[50][50]; int total; total = leerLista(nombres); ordena(nombres,total); imprime(nombres,total); getch(); }
  • 41. 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 entero NOTA: a los apuntadores solo puede asignárseles: 0, NULL o una dirección
  • 42. Ejemplo #include <stdio.h> #include <conio.h> main(){ int entero,*pentero; entero = 548; pentero = &entero; printf("La dirección de entero es %dn",&entero); printf("el valor de pentero es %dn",pentero); printf("el valor de entero es %dn",entero); printf("el valor de *pentero es %dn",*pentero); *pentero = -234; printf("el valor de entero es %dn",entero); printf("el valor de *pentero es %dn",*pentero); getch(); }
  • 43. Aritmética de apuntadores Los 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 %dn",b,*b); b = b + 1;//b apunta a a[1] printf("dirección de b es %d, el contenido es %dn",b,*b); b = b + 3;//b apunta a a[4] printf("dirección de b es %d, el contenido es %dn",b,*b); b = b - 2;//b apunta a a[2] printf("dirección de b es %d, el contenido es %dn",b,*b); getch(); }
  • 44. #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 %lfn",b,*b); b = b + 1;//b apunta a a[1] printf("dirección de b es %d, el contenido es %lfn",b,*b); b = b + 3;//b apunta a a[4] printf("dirección de b es %d, el contenido es %lfn",b,*b); b = b - 2;//b apunta a a[2] printf("dirección de b es %d, el contenido es %lfn",b,*b); getch(); }
  • 45. 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]=%lfn",i,a[i]); for(i=0;i<10;i++) printf("*(b+%d)=%lfn",i,*(b+i)); getch(); } La aritmética de apuntadores y los subíndices son equivalentes.
  • 46. 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.
  • 47. 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(); }
  • 48. Salida de apuntador a función f(0.000000) = 0.000000 f(9.000000) = 0.156435 f(18.000000) = 0.309018 f(27.000000) = 0.453991 f(36.000000) = 0.587786 f(45.000000) = 0.707108 f(54.000000) = 0.809018 f(63.000000) = 0.891008 f(72.000000) = 0.951057 f(81.000000) = 0.987689 f(0.000000) = 1.000000 f(9.000000) = 0.987688 f(18.000000) = 0.951056 f(27.000000) = 0.891006 f(36.000000) = 0.809016 f(45.000000) = 0.707105 f(54.000000) = 0.587783 f(63.000000) = 0.453988 f(72.000000) = 0.309014 f(81.000000) = 0.156431
  • 49. ¿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 = %dn”,*px,x); printf(“*p = %f x = %fn”,*py,y); x *px y *py
  • 50. 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
  • 51. 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
  • 52. 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'; } }
  • 53. 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++; } }
  • 54. 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'; }
  • 55. 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; }
  • 56. Ejemplo main(){ char c1[256],c2[256]; strcpy(c1,"hola tal"); printf("c1 = %sn",c1); strcpy(c2,"que "); printf("c2 = %sn",c2); insertstr(""esta es una prueba "",c1,5); printf("inserta "esta es una prueba " en c1 = %sn",c1); deletestr(c1,0,8); printf("borra de 0 a 8 en c1 = %sn",c1); deletestr(c1,10,7); printf("borra de 10 a 17 en c1 = %sn",c1); deletestr(c1,16,5); printf("borra de 16 a 21 en c1 = %sn",c1); printf("pos de "una" = %dn",pos("una",c1)); printf("pos de "xxx" = %dn",pos("xxx",c1)); printf("pos de "tal" = %dn",pos("tal",c1)); getch(); }