SlideShare une entreprise Scribd logo
1  sur  59
Télécharger pour lire hors ligne
Programación 1
Cadenas en C
Angel Vázquez-Patiño
angel.vazquezp@ucuenca.edu.ec
Departamento de Ciencias de la Computación
Universidad de Cuenca
19 de septiembre de 2017
19/09/17 Angel Vázquez-Patiño 2/59
Objetivos
1. Manipular caracteres y cadenas en C
2. Utilizar librerías estándar de C para la
manipulación de caracteres y cadenas
3. Usar punteros para el manejo de cadenas y
caracteres en C
4. Convertir tipos de datos en C
19/09/17 Angel Vázquez-Patiño 3/59
Contenido
Cadenas en C
Lectura de una cadena desde el teclado
Bibliotecas estándar
ctype.h
string.h
Conversión de tipos
Ejercicios
19/09/17 Angel Vázquez-Patiño 4/59
Cadenas en C
19/09/17 Angel Vázquez-Patiño 5/59
Cadenas en C
●
Las cadenas son realmente un arreglo
unidimensional de caracteres terminados por
un carácter nulo ‘0’
●
Así una cadena terminada en nulo contiene los
caracteres que comprenden la cadena
seguidos por un null
19/09/17 Angel Vázquez-Patiño 6/59
Cadenas en C
Declaración e inicialización de cadena “Hola”
●
Por el carácter nulo al final se reserva un
elemento más en el arreglo
char cad[5] = {‘H’,’o’,’l’,’a’,’0’};
●
Siguiendo la regla de inicialización de arreglos
char cad[] = “Hola”;
19/09/17 Angel Vázquez-Patiño 7/59
Cadenas en C
Representación de la cadena en memoria
19/09/17 Angel Vázquez-Patiño 8/59
Cadenas en C
Impresión de la cadena
1 #include <stdio.h>
2 int main(){
3 char cad[5] = {'H', 'o', 'l',
'a', '0'};
4 printf("Saludo: %sn", cad);
5 }
19/09/17 Angel Vázquez-Patiño 9/59
Cadenas en C
Recorrido de la cadena (1)
1 int main(){
2 char cad[5] = {'H', 'o', 'l',
'a', '0'};
3 int i = 0;
4 while(cad[i])
5 putchar(cad[i++]);
6 }
19/09/17 Angel Vázquez-Patiño 10/59
Cadenas en C
Recorrido de la cadena (2)
1 int main(){
2 char cad[5] = {'H', 'o', 'l',
'a', '0'};
3 for(int j = 0; j<5; j++)
4 printf("%c", cad[j]);
5 }
19/09/17 Angel Vázquez-Patiño 11/59
Lectura de una cadena desde el
teclado
19/09/17 Angel Vázquez-Patiño 12/59
Leer una cadena desde el teclado
1 int main(){
2 char nombre[50];
3 printf("Ingrese su nombre
completo (50 letras máximo):
");
4 scanf("%s", nombre);
5 printf("Nombre: %s", nombre);
6 }
19/09/17 Angel Vázquez-Patiño 13/59
Leer una cadena desde el teclado
1 int main(){
2 char nombre[50];
3 printf("Ingrese su nombre
completo (50 letras máximo): ");
4 scanf("%49[0-9a-zA-z ]",
nombre);
5 printf("Nombre: %s", nombre);
6 }
19/09/17 Angel Vázquez-Patiño 14/59
Leer una cadena desde el teclado
1 int main(){
2 char nombre[50];
3 printf("Ingrese su nombre
completo (50 letras máximo):
");
4 scanf("%[^n]s", nombre);
5 printf("Nombre: %s", nombre);
6 }
19/09/17 Angel Vázquez-Patiño 15/59
Leer una cadena desde el teclado
1 #include<stdio.h>
2 int main(){
3 char nombre[50];
4 printf("Ingrese su nombre completo
(50 letras máximo): ");
5 gets(nombre); // warning: the
`gets' function is dangerous and
should not be used.
6 printf("Nombre: %s", nombre);}
19/09/17 Angel Vázquez-Patiño 16/59
Leer una cadena desde el teclado
1 #include<stdio.h>
2 int main(){
3 char nombre[50];
4 printf("Ingrese su nombre completo
(50 letras máximo): ");
5 fgets(nombre, 50, stdin);
6 printf("Nombre: %s", nombre);}
Vea https://goo.gl/VE5N1D
19/09/17 Angel Vázquez-Patiño 17/59
Ejercicios
Ejercicio
●
Escribir una función que reciba como
parámetros una cadena de caracteres y un
carácter; la función devuelve el número de
veces que se encuentra el carácter en la
cadena
19/09/17 Angel Vázquez-Patiño 18/59
1 #include <stdio.h>
2 int contarCaracteres(char *str, char caracter){
3 int i = 0, cont = 0;
4 while(str[i])
5 if(str[i++] == caracter) cont++;
6 return cont;}
7 int main(){
8 char cadena[99] = "UCuenca", caracter = 'c';
9 int salida = contarCaracteres(cadena,
caracter);
10 printf("Caracteres %c: %i", caracter,
salida);
11 return(0);}
19/09/17 Angel Vázquez-Patiño 19/59
Ejercicios
Ejercicio
●
Implemente una función que devuelva el
número de palabras de una cadena.
19/09/17 Angel Vázquez-Patiño 20/59
1 int numPalabras(char cad[]){
2 int np=0, i=0;
3 while(cad[i]){
4 if(cad[i++] == ' ') np++;}
5 return ++np;}
6 int main(){
7 char cadena[100];
8 scanf("%[^n]s", cadena);
9 int n = numPalabras(cadena);
10 printf("Número de palabras: %i",
n);}
19/09/17 Angel Vázquez-Patiño 21/59
Bibliotecas estándar
19/09/17 Angel Vázquez-Patiño 22/59
ctype.h
19/09/17 Angel Vázquez-Patiño 23/59
ctype.h
int isalpha(int c)
● Verifica si el caracter c es alfabético
int isdigit(int c)
● Verifica si el caracter c es dígito decimal
int tolower(int c)
● Convierte el carácter c a minúscula
int toupper(int c)
● Convierte el carácter c a mayúscula
19/09/17 Angel Vázquez-Patiño 24/59
1 #include <stdio.h>
2 #include <ctype.h>
3 int main(){
4 int i = 0; char cad[100];
5 scanf("%[^n]s", cad);
6 while(cad[i])
7 putchar(tolower(cad[i++]));
8 i=0; printf("n");
9 while(cad[i])
10 putchar(toupper(cad[i++]));}
19/09/17 Angel Vázquez-Patiño 25/59
ctype.h
Ejercicio 1
●
Contar el número de letras del alfabeto español
de un texto ingresado.
19/09/17 Angel Vázquez-Patiño 26/59
1 int main(){
2 char cad[100];
3 scanf("%[^n]s", cad);
4 int i = 0, nLetAbc = 0;
5 while(cad[i]){
6 if(isalpha(cad[i]) || cad[i] == -79
|| cad[i] == -111) nLetAbc++;
7 i++;
8 }
9 printf("Letras del alfabeto: %d.",
nLetAbc);}
19/09/17 Angel Vázquez-Patiño 27/59
ctype.h
Ejercicio 2
●
Leer una cadena y decir si es un número entero
no negativo o real no negativo válido.
19/09/17 Angel Vázquez-Patiño 28/59
1 int main(){
2 char cad[100]; scanf("%[^n]s", cad);
3 int i = 0, nPun = 0, nDec = 0;
4 while(cad[i]){
5 if(isdigit(cad[i])) nDec++;
6 else if(cad[i] == '.') nPun++;
7 i++;}
8 if(nDec == i) printf("Número
entero.");
9 else if(nDec == i-1 && nPun == 1)
printf("Número real.");
10 else printf("Número no válido.");}
19/09/17 Angel Vázquez-Patiño 29/59
ctype.h
Ejercicio 3
●
Implemente una función que reciba una cadena
y una letra, y coloque en mayúsculas cada
ocurrencia de la letra (case sensitive) en la
cadena (la función debe modificar la cadena en
sí).
19/09/17 Angel Vázquez-Patiño 30/59
1 void transMayuscula(char cad[], char letra){
2 int i=0;
3 while(cad[i]){
4 if(cad[i] == letra)
5 cad[i]=toupper(letra);
6 i++;}}
7 int main(){
8 char cadena[100], let;
9 scanf("%[^n]s", cadena);
10 let = getchar();
11 transMayuscula(cadena, let);
12 printf("Cadena: %s", cadena);}
19/09/17 Angel Vázquez-Patiño 31/59
string.h
19/09/17 Angel Vázquez-Patiño 32/59
string.h
Vea los vídeos
Aprende Programación en C || Programación ATS
1) https://youtu.be/YqoV6UMQEcE
2) https://youtu.be/iW_zzg2ppvg
3) https://youtu.be/_uk3pSfTpUE
4) https://youtu.be/k2Bm1rc4LGY
5) https://youtu.be/1uBfk0Gn0io
6) https://youtu.be/qbBG8rjpOW4
19/09/17 Angel Vázquez-Patiño 33/59
string.h
char *strcpy(char *dest, const char
*src)
● Copia la cadena apuntada por src a dest
char *strcat(char *dest, const char
*src)
● Concatena la cadenas apuntada por src al final
de la cadena apuntada por dest
size_t strlen(const char *str)
● Calcula la longitud de la cadena str sin incluir el
carácter nulo de terminación
19/09/17 Angel Vázquez-Patiño 34/59
string.h
int strcmp(const char *str1, const
char *str2)
●
0 si str1 = str2; <0 si str1 < str2; >0 si str1 > str2
char *strchr(const char *str, int c)
● Busca la primera ocurrencia del carácter c (un
unsigned char) en la cadena apuntada por el
argumento str
19/09/17 Angel Vázquez-Patiño 35/59
string.h
char *strstr(const char *haystack,
const char *needle)
●
Encuentra la primera ocurrencia de la cadena
needle completa (sin incluir el carácter nulo de
terminación) que aparece en la cadena
haystack
char *strtok(char *str, const char
*delim)
● Separa la cadena str en una serie de tokens
separados por delim
19/09/17 Angel Vázquez-Patiño 36/59
#include <stdio.h>
#include <string.h>
int main (){
char cad1[] = "Hola ";
char cad2[] = "Mundo"; char cad3[2];
strcpy(cad3, cad1); // copia cad1 en cad3
printf("strcpy(cad3, cad1): %sn", cad3);
strcat(cad1, cad2); // concatena
printf("strcat(cad1, cad2): %sn", cad1);
// Longitud cad1 después de concatenación
printf("strlen(cad1):%d", strlen(cad1));}
19/09/17 Angel Vázquez-Patiño 37/59
sprintf
1 #include <stdio.h>
2 int main(){
3 char nomCom[50];
4 char nombre[] = "Angel";
5 char apellido[] = "Vázquez";
6 sprintf(nomCom, "%s %s", nombre,
apellido);
7 printf("Nombre completo: %s.",
nomCom);}
19/09/17 Angel Vázquez-Patiño 38/59
string.h
Ver si una cadena está dentro de otra
1 int main(){
2 char cad[100], subcad[100];
3 scanf("%[^n]s", cad);
4 scanf("%[^n]s", subcad);
5 if(strstr(cad, subcad) != NULL)
6 printf("Sí contiene.");
7 else
8 printf("No contiene.");}
19/09/17 Angel Vázquez-Patiño 39/59
string.h
Posición de la primera ocurrencia de una
subcadena
1 int main(){
2 char a[] = "Hola mundo";
3 char *b = strstr(a, "mundo");
4 printf("b: %pn*b: %cn", b, *b);
5 printf("na: %pn*a: %cn", a, *a);
6 printf("nPosición: %i", (int)(b-
a));}
19/09/17 Angel Vázquez-Patiño 40/59
string.h
Separar una cadena en tokens
1 int main(){
2 char str[60] = "Este es- mi curso - de C -en
la -- Universidad de Cuenca";
3 const char s[2] = "-"; char *token;
4 token = strtok(str, s);//obtiene el primer
token
5 while(token != NULL){ // va a través de
6 printf( " %sn", token ); // los otros
tokens
7 token = strtok(NULL, s);}
8 return(0);}
19/09/17 Angel Vázquez-Patiño 41/59
string.h
Ejercicio
●
Solicitar el ingreso de los apellidos de dos
personas. Mostrar un mensaje indicando si son
iguales o distintos.
19/09/17 Angel Vázquez-Patiño 42/59
1 int main()
2 {
3 char ape1[100], ape2[100];
4 scanf("%s", ape1);
5 scanf("%s", ape2);
6 if(strcmp(ape1, ape2))
7 printf("Apellidos diferentes");
8 else
9 printf("Apellidos iguales");
10 }
19/09/17 Angel Vázquez-Patiño 43/59
Conversión de tipos
19/09/17 Angel Vázquez-Patiño 44/59
Conversión de tipos
Cadena a entero
1 #include<stdio.h>
2 #include<stdlib.h> // para atoi
3 int main(){
4 char cadena[] = "48";
5 int num = atoi(cadena);
6 printf("%d", num*2);}
19/09/17 Angel Vázquez-Patiño 45/59
Conversión de tipos
Cadena a float
1 #include<stdio.h>
2 #include<stdlib.h> // para atof
3 int main(){
4 char cadena[] = "48.098";
5 float num = atof(cadena);
6 printf("%f", num);}
19/09/17 Angel Vázquez-Patiño 46/59
Conversión de tipos
Entero a cadena
1 #include<stdio.h> // sprintf
2 int main(){
3 int entero = 368;
4 char cad[4];
5 sprintf(cad, "%d", entero);
6 printf("%s", cad);}
19/09/17 Angel Vázquez-Patiño 47/59
Conversión de tipos
Entero a cadena
● También puede revisar la función itoa
● itoa no es estándar
●
https://goo.gl/Cv7r7c
19/09/17 Angel Vázquez-Patiño 48/59
Conversión de tipos
Flotante a cadena
●
Vea https://goo.gl/KjIdgx
19/09/17 Angel Vázquez-Patiño 49/59
Conversión de tipos
Ejercicio
●
Solicitar el ingreso, como cadenas, del nombre
y edad de dos personas (validar que sea una
edad correcta entre 0 y 130 años). Mostrar el
nombre de la persona con mayor edad.
19/09/17 Angel Vázquez-Patiño 50/59
1 int main(){
2 char nom1[50],eda1[3],nom2[50],eda2[3];
3 scanf("%s", nom1);
4 do{ scanf("%s", eda1);
5 }while(atoi(eda1)<0 || atoi(eda1)>130);
6 scanf("%s", nom2);
7 do{ scanf("%s", eda2);
8 }while(atoi(eda2)<0 || atoi(eda2)>130);
9 if(atoi(eda1) > atoi(eda2))
10 printf("Mayor: %s", nom1);
11 else printf("Mayor: %s", nom2);}
19/09/17 Angel Vázquez-Patiño 51/59
Ejercicios
19/09/17 Angel Vázquez-Patiño 52/59
Ejercicios
1) Implemente la función _Bool equals(const
char *str1, const char *str2) que
devuelve true/false si las cadenas enviadas
como argumento son/(no son) iguales. Es case
sensitive
2) Implemente la función _Bool
equalsIgnoreCase(const char *str1,
const char *str2) que devuelve true/false
si las cadenas enviadas como argumento son/
(no son) iguales. Es no case sensitive.
19/09/17 Angel Vázquez-Patiño 53/59
Ejercicios
3) Implemente la función void substring(char
*dest, const char *str, size_t pos)
que devuelve una subcadena dest desde la
posición pos hasta el final de la cadena str
4) Implemente la función void substring(char
*dest, const char *str, size_t pos1,
size_t pos2) que devuelve una subcadena
dest desde la posición pos1 hasta la posición
pos2 de la cadena str
19/09/17 Angel Vázquez-Patiño 54/59
Ejercicios
5) Implemente la función size_t
lastIndexOf(const char *cad, const
char *subcad) que da la posición de la
primera ocurrencia de la subcadena subcad
comparando la ocurrencia de derecha a
izquierda en cad
19/09/17 Angel Vázquez-Patiño 55/59
Conceptos y términos importantes
19/09/17 Angel Vázquez-Patiño 56/59
Conceptos y términos importantes
●
Maneras de leer cadenas desde el teclado
●
Una cadena es un arreglo de caracteres
●
Punteros
●
Uso de punteros en las funciones
●
Transformar caracteres o cadenas a números
19/09/17 Angel Vázquez-Patiño 57/59
Referencias
●
Gustedt, J., 2017. Modern C. France.
http://icube-icps.unistra.fr/index.php/File:Moder
nC.pdf
●
C - Strings,
https://www.tutorialspoint.com/cprogramming/c_
strings.htm
●
How do you allow spaces to be entered using
scanf, https://goo.gl/UOk4e
●
C Standard Library Reference Tutorial,
https://www.tutorialspoint.com/c_standard_librar
y/
19/09/17 Angel Vázquez-Patiño 58/59
Referencias
●
Trim a string in C, https://goo.gl/SvJKk
Revisar
●
Sección 6.1. Arrays del libro de Gustedt (2017)
●
Vázquez-Patiño, A., 2017. Ejercicios Básicos
de Programación, 1st ed. Departamento de
Ciencias de la Computación, Universidad de
Cuenca, Cuenca, Ecuador.
https://goo.gl/X0UTxi
19/09/17 Angel Vázquez-Patiño 59/59
Preguntas

Contenu connexe

Tendances

Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datospepelebu1313
 
Presentacion arbol-binario
Presentacion arbol-binarioPresentacion arbol-binario
Presentacion arbol-binarioMariela Cabezas
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasHuascar Génere
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamientoLalo Chooper
 
Diapositiva de prueba
Diapositiva de pruebaDiapositiva de prueba
Diapositiva de pruebaJPi2013
 
PRIMER Proyecto alarma arduino
PRIMER Proyecto alarma arduinoPRIMER Proyecto alarma arduino
PRIMER Proyecto alarma arduinoLuis Leandro Carlo
 
Ejercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registrosEjercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registrosrasave
 
10 ejercicios-de-do-while
10 ejercicios-de-do-while10 ejercicios-de-do-while
10 ejercicios-de-do-whileDelvi Ramirez
 
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
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoJosé Antonio Sandoval Acosta
 
Dfd ejercicios 2017__01
Dfd ejercicios 2017__01Dfd ejercicios 2017__01
Dfd ejercicios 2017__01Don Augusto
 

Tendances (20)

Sintaxis del lenguaje c++
Sintaxis del lenguaje c++Sintaxis del lenguaje c++
Sintaxis del lenguaje c++
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Estructura switch case
Estructura switch caseEstructura switch case
Estructura switch case
 
Estructuras Repetitivas con PSeInt (Parte 2)
Estructuras Repetitivas con PSeInt (Parte 2)Estructuras Repetitivas con PSeInt (Parte 2)
Estructuras Repetitivas con PSeInt (Parte 2)
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datos
 
Presentacion arbol-binario
Presentacion arbol-binarioPresentacion arbol-binario
Presentacion arbol-binario
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
Búsqueda secuencial y binaria
Búsqueda secuencial y binariaBúsqueda secuencial y binaria
Búsqueda secuencial y binaria
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamiento
 
Aplicaciones de los árboles y grafos
Aplicaciones de los árboles y grafosAplicaciones de los árboles y grafos
Aplicaciones de los árboles y grafos
 
Diapositiva de prueba
Diapositiva de pruebaDiapositiva de prueba
Diapositiva de prueba
 
PRIMER Proyecto alarma arduino
PRIMER Proyecto alarma arduinoPRIMER Proyecto alarma arduino
PRIMER Proyecto alarma arduino
 
Ejercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registrosEjercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registros
 
10 ejercicios-de-do-while
10 ejercicios-de-do-while10 ejercicios-de-do-while
10 ejercicios-de-do-while
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
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.
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Tipos De Datos
Tipos De DatosTipos De Datos
Tipos De Datos
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamiento
 
Dfd ejercicios 2017__01
Dfd ejercicios 2017__01Dfd ejercicios 2017__01
Dfd ejercicios 2017__01
 

En vedette

En vedette (6)

Programación 1: funciones en C
Programación 1: funciones en CProgramación 1: funciones en C
Programación 1: funciones en C
 
Programación 1: búsquedas y ordenamientos
Programación 1: búsquedas y ordenamientosProgramación 1: búsquedas y ordenamientos
Programación 1: búsquedas y ordenamientos
 
Teoría de redes: presentación
Teoría de redes: presentaciónTeoría de redes: presentación
Teoría de redes: presentación
 
Machine learning: presentación
Machine learning: presentaciónMachine learning: presentación
Machine learning: presentación
 
Programación 1: tipos básicos de datos en C
Programación 1: tipos básicos de datos en CProgramación 1: tipos básicos de datos en C
Programación 1: tipos básicos de datos en C
 
Programación 1: arreglos en C
Programación 1: arreglos en CProgramación 1: arreglos en C
Programación 1: arreglos en C
 

Similaire à Cadenas C programación (20)

Cadenas y punteros.ppt
Cadenas y punteros.pptCadenas y punteros.ppt
Cadenas y punteros.ppt
 
08 strings o cadenas
08 strings o cadenas08 strings o cadenas
08 strings o cadenas
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Funciones str
Funciones strFunciones str
Funciones str
 
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
 
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
 
Practicas de programacion 11 20
Practicas de programacion 11 20Practicas de programacion 11 20
Practicas de programacion 11 20
 
Entrada y salida de datos en c
Entrada y salida de datos en cEntrada y salida de datos en c
Entrada y salida de datos en c
 
Ejercicios programacion cortos
Ejercicios programacion cortosEjercicios programacion cortos
Ejercicios programacion cortos
 
Instrucciones(raptor, java, c#)
Instrucciones(raptor, java, c#)Instrucciones(raptor, java, c#)
Instrucciones(raptor, java, c#)
 
Comandos
ComandosComandos
Comandos
 
Instrucciones(raptor, java, c#)
Instrucciones(raptor, java, c#)Instrucciones(raptor, java, c#)
Instrucciones(raptor, java, c#)
 
Ejercicios de programación.
Ejercicios de programación.Ejercicios de programación.
Ejercicios de programación.
 
Cadenas
CadenasCadenas
Cadenas
 
Rubenmajano
RubenmajanoRubenmajano
Rubenmajano
 
Deber de programación
Deber de programación  Deber de programación
Deber de programación
 
Tema 4 - Tipos datos avanzados (I)
Tema 4 - Tipos datos avanzados (I)Tema 4 - Tipos datos avanzados (I)
Tema 4 - Tipos datos avanzados (I)
 
Taller 1 de estructuras
Taller 1 de estructurasTaller 1 de estructuras
Taller 1 de estructuras
 

Plus de Angel Vázquez Patiño

Valores extremos y comportamiento de las funciones y de sus gráficas
Valores extremos y comportamiento de las funciones y de sus gráficasValores extremos y comportamiento de las funciones y de sus gráficas
Valores extremos y comportamiento de las funciones y de sus gráficasAngel Vázquez Patiño
 
Causality and climate networks approaches for evaluating climate models, trac...
Causality and climate networks approaches for evaluating climate models, trac...Causality and climate networks approaches for evaluating climate models, trac...
Causality and climate networks approaches for evaluating climate models, trac...Angel Vázquez Patiño
 
Diferencias finitas y Ecuación de calor
Diferencias finitas y Ecuación de calorDiferencias finitas y Ecuación de calor
Diferencias finitas y Ecuación de calorAngel Vázquez Patiño
 
Puntos ordinarios y singularidades de una EDO lineal
Puntos ordinarios y singularidades de una EDO linealPuntos ordinarios y singularidades de una EDO lineal
Puntos ordinarios y singularidades de una EDO linealAngel Vázquez Patiño
 
Métodos de resolución de EDOs mediante series
Métodos de resolución de EDOs mediante seriesMétodos de resolución de EDOs mediante series
Métodos de resolución de EDOs mediante seriesAngel Vázquez Patiño
 
Solución en series de EDOs no lineales de orden mayor a uno y de un sistema d...
Solución en series de EDOs no lineales de orden mayor a uno y de un sistema d...Solución en series de EDOs no lineales de orden mayor a uno y de un sistema d...
Solución en series de EDOs no lineales de orden mayor a uno y de un sistema d...Angel Vázquez Patiño
 
Problemas que originan sistemas de ecuaciones
Problemas que originan sistemas de ecuacionesProblemas que originan sistemas de ecuaciones
Problemas que originan sistemas de ecuacionesAngel Vázquez Patiño
 
Linealización de sistemas de primer orden
Linealización de sistemas de primer ordenLinealización de sistemas de primer orden
Linealización de sistemas de primer ordenAngel Vázquez Patiño
 
Fundamentos de Computación y Programación
Fundamentos de Computación y ProgramaciónFundamentos de Computación y Programación
Fundamentos de Computación y ProgramaciónAngel Vázquez Patiño
 
Causality Strength Signatures for Measuring GCMs Performance: The South Ameri...
Causality Strength Signatures for Measuring GCMs Performance: The South Ameri...Causality Strength Signatures for Measuring GCMs Performance: The South Ameri...
Causality Strength Signatures for Measuring GCMs Performance: The South Ameri...Angel Vázquez Patiño
 

Plus de Angel Vázquez Patiño (20)

Funciones, límites y continuidad
Funciones, límites y continuidadFunciones, límites y continuidad
Funciones, límites y continuidad
 
Integral definida e integración
Integral definida e integraciónIntegral definida e integración
Integral definida e integración
 
Valores extremos y comportamiento de las funciones y de sus gráficas
Valores extremos y comportamiento de las funciones y de sus gráficasValores extremos y comportamiento de las funciones y de sus gráficas
Valores extremos y comportamiento de las funciones y de sus gráficas
 
Derivada y diferenciación
Derivada y diferenciaciónDerivada y diferenciación
Derivada y diferenciación
 
Causality and climate networks approaches for evaluating climate models, trac...
Causality and climate networks approaches for evaluating climate models, trac...Causality and climate networks approaches for evaluating climate models, trac...
Causality and climate networks approaches for evaluating climate models, trac...
 
Diferencias finitas y Ecuación de calor
Diferencias finitas y Ecuación de calorDiferencias finitas y Ecuación de calor
Diferencias finitas y Ecuación de calor
 
Puntos ordinarios y singularidades de una EDO lineal
Puntos ordinarios y singularidades de una EDO linealPuntos ordinarios y singularidades de una EDO lineal
Puntos ordinarios y singularidades de una EDO lineal
 
La ecuación diferencial de Legendre
La ecuación diferencial de LegendreLa ecuación diferencial de Legendre
La ecuación diferencial de Legendre
 
Solución en series de y' = f(x,y)
Solución en series de y' = f(x,y)Solución en series de y' = f(x,y)
Solución en series de y' = f(x,y)
 
Métodos de resolución de EDOs mediante series
Métodos de resolución de EDOs mediante seriesMétodos de resolución de EDOs mediante series
Métodos de resolución de EDOs mediante series
 
Solución en series de EDOs no lineales de orden mayor a uno y de un sistema d...
Solución en series de EDOs no lineales de orden mayor a uno y de un sistema d...Solución en series de EDOs no lineales de orden mayor a uno y de un sistema d...
Solución en series de EDOs no lineales de orden mayor a uno y de un sistema d...
 
Problemas que originan sistemas de ecuaciones
Problemas que originan sistemas de ecuacionesProblemas que originan sistemas de ecuaciones
Problemas que originan sistemas de ecuaciones
 
Linealización de sistemas de primer orden
Linealización de sistemas de primer ordenLinealización de sistemas de primer orden
Linealización de sistemas de primer orden
 
Sistemas de EDOs
Sistemas de EDOsSistemas de EDOs
Sistemas de EDOs
 
Método de la secante
Método de la secanteMétodo de la secante
Método de la secante
 
Iteraciones de punto fijo
Iteraciones de punto fijoIteraciones de punto fijo
Iteraciones de punto fijo
 
Objetos y variables en Python
Objetos y variables en PythonObjetos y variables en Python
Objetos y variables en Python
 
Definiciones de Error
Definiciones de ErrorDefiniciones de Error
Definiciones de Error
 
Fundamentos de Computación y Programación
Fundamentos de Computación y ProgramaciónFundamentos de Computación y Programación
Fundamentos de Computación y Programación
 
Causality Strength Signatures for Measuring GCMs Performance: The South Ameri...
Causality Strength Signatures for Measuring GCMs Performance: The South Ameri...Causality Strength Signatures for Measuring GCMs Performance: The South Ameri...
Causality Strength Signatures for Measuring GCMs Performance: The South Ameri...
 

Dernier

Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILProblemSolved
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptMarianoSanchez70
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOLUISDAVIDVIZARRETARA
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfmatepura
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesgovovo2388
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxJuanPablo452634
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfXimenaFallaLecca1
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAJOSLUISCALLATAENRIQU
 
clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinosDayanaCarolinaAP
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesMIGUELANGEL2658
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOFritz Rebaza Latoche
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralsantirangelcor
 

Dernier (20)

Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdf
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitales
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
 
clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinos
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias locales
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integral
 

Cadenas C programación

  • 1. Programación 1 Cadenas en C Angel Vázquez-Patiño angel.vazquezp@ucuenca.edu.ec Departamento de Ciencias de la Computación Universidad de Cuenca 19 de septiembre de 2017
  • 2. 19/09/17 Angel Vázquez-Patiño 2/59 Objetivos 1. Manipular caracteres y cadenas en C 2. Utilizar librerías estándar de C para la manipulación de caracteres y cadenas 3. Usar punteros para el manejo de cadenas y caracteres en C 4. Convertir tipos de datos en C
  • 3. 19/09/17 Angel Vázquez-Patiño 3/59 Contenido Cadenas en C Lectura de una cadena desde el teclado Bibliotecas estándar ctype.h string.h Conversión de tipos Ejercicios
  • 5. 19/09/17 Angel Vázquez-Patiño 5/59 Cadenas en C ● Las cadenas son realmente un arreglo unidimensional de caracteres terminados por un carácter nulo ‘0’ ● Así una cadena terminada en nulo contiene los caracteres que comprenden la cadena seguidos por un null
  • 6. 19/09/17 Angel Vázquez-Patiño 6/59 Cadenas en C Declaración e inicialización de cadena “Hola” ● Por el carácter nulo al final se reserva un elemento más en el arreglo char cad[5] = {‘H’,’o’,’l’,’a’,’0’}; ● Siguiendo la regla de inicialización de arreglos char cad[] = “Hola”;
  • 7. 19/09/17 Angel Vázquez-Patiño 7/59 Cadenas en C Representación de la cadena en memoria
  • 8. 19/09/17 Angel Vázquez-Patiño 8/59 Cadenas en C Impresión de la cadena 1 #include <stdio.h> 2 int main(){ 3 char cad[5] = {'H', 'o', 'l', 'a', '0'}; 4 printf("Saludo: %sn", cad); 5 }
  • 9. 19/09/17 Angel Vázquez-Patiño 9/59 Cadenas en C Recorrido de la cadena (1) 1 int main(){ 2 char cad[5] = {'H', 'o', 'l', 'a', '0'}; 3 int i = 0; 4 while(cad[i]) 5 putchar(cad[i++]); 6 }
  • 10. 19/09/17 Angel Vázquez-Patiño 10/59 Cadenas en C Recorrido de la cadena (2) 1 int main(){ 2 char cad[5] = {'H', 'o', 'l', 'a', '0'}; 3 for(int j = 0; j<5; j++) 4 printf("%c", cad[j]); 5 }
  • 11. 19/09/17 Angel Vázquez-Patiño 11/59 Lectura de una cadena desde el teclado
  • 12. 19/09/17 Angel Vázquez-Patiño 12/59 Leer una cadena desde el teclado 1 int main(){ 2 char nombre[50]; 3 printf("Ingrese su nombre completo (50 letras máximo): "); 4 scanf("%s", nombre); 5 printf("Nombre: %s", nombre); 6 }
  • 13. 19/09/17 Angel Vázquez-Patiño 13/59 Leer una cadena desde el teclado 1 int main(){ 2 char nombre[50]; 3 printf("Ingrese su nombre completo (50 letras máximo): "); 4 scanf("%49[0-9a-zA-z ]", nombre); 5 printf("Nombre: %s", nombre); 6 }
  • 14. 19/09/17 Angel Vázquez-Patiño 14/59 Leer una cadena desde el teclado 1 int main(){ 2 char nombre[50]; 3 printf("Ingrese su nombre completo (50 letras máximo): "); 4 scanf("%[^n]s", nombre); 5 printf("Nombre: %s", nombre); 6 }
  • 15. 19/09/17 Angel Vázquez-Patiño 15/59 Leer una cadena desde el teclado 1 #include<stdio.h> 2 int main(){ 3 char nombre[50]; 4 printf("Ingrese su nombre completo (50 letras máximo): "); 5 gets(nombre); // warning: the `gets' function is dangerous and should not be used. 6 printf("Nombre: %s", nombre);}
  • 16. 19/09/17 Angel Vázquez-Patiño 16/59 Leer una cadena desde el teclado 1 #include<stdio.h> 2 int main(){ 3 char nombre[50]; 4 printf("Ingrese su nombre completo (50 letras máximo): "); 5 fgets(nombre, 50, stdin); 6 printf("Nombre: %s", nombre);} Vea https://goo.gl/VE5N1D
  • 17. 19/09/17 Angel Vázquez-Patiño 17/59 Ejercicios Ejercicio ● Escribir una función que reciba como parámetros una cadena de caracteres y un carácter; la función devuelve el número de veces que se encuentra el carácter en la cadena
  • 18. 19/09/17 Angel Vázquez-Patiño 18/59 1 #include <stdio.h> 2 int contarCaracteres(char *str, char caracter){ 3 int i = 0, cont = 0; 4 while(str[i]) 5 if(str[i++] == caracter) cont++; 6 return cont;} 7 int main(){ 8 char cadena[99] = "UCuenca", caracter = 'c'; 9 int salida = contarCaracteres(cadena, caracter); 10 printf("Caracteres %c: %i", caracter, salida); 11 return(0);}
  • 19. 19/09/17 Angel Vázquez-Patiño 19/59 Ejercicios Ejercicio ● Implemente una función que devuelva el número de palabras de una cadena.
  • 20. 19/09/17 Angel Vázquez-Patiño 20/59 1 int numPalabras(char cad[]){ 2 int np=0, i=0; 3 while(cad[i]){ 4 if(cad[i++] == ' ') np++;} 5 return ++np;} 6 int main(){ 7 char cadena[100]; 8 scanf("%[^n]s", cadena); 9 int n = numPalabras(cadena); 10 printf("Número de palabras: %i", n);}
  • 21. 19/09/17 Angel Vázquez-Patiño 21/59 Bibliotecas estándar
  • 23. 19/09/17 Angel Vázquez-Patiño 23/59 ctype.h int isalpha(int c) ● Verifica si el caracter c es alfabético int isdigit(int c) ● Verifica si el caracter c es dígito decimal int tolower(int c) ● Convierte el carácter c a minúscula int toupper(int c) ● Convierte el carácter c a mayúscula
  • 24. 19/09/17 Angel Vázquez-Patiño 24/59 1 #include <stdio.h> 2 #include <ctype.h> 3 int main(){ 4 int i = 0; char cad[100]; 5 scanf("%[^n]s", cad); 6 while(cad[i]) 7 putchar(tolower(cad[i++])); 8 i=0; printf("n"); 9 while(cad[i]) 10 putchar(toupper(cad[i++]));}
  • 25. 19/09/17 Angel Vázquez-Patiño 25/59 ctype.h Ejercicio 1 ● Contar el número de letras del alfabeto español de un texto ingresado.
  • 26. 19/09/17 Angel Vázquez-Patiño 26/59 1 int main(){ 2 char cad[100]; 3 scanf("%[^n]s", cad); 4 int i = 0, nLetAbc = 0; 5 while(cad[i]){ 6 if(isalpha(cad[i]) || cad[i] == -79 || cad[i] == -111) nLetAbc++; 7 i++; 8 } 9 printf("Letras del alfabeto: %d.", nLetAbc);}
  • 27. 19/09/17 Angel Vázquez-Patiño 27/59 ctype.h Ejercicio 2 ● Leer una cadena y decir si es un número entero no negativo o real no negativo válido.
  • 28. 19/09/17 Angel Vázquez-Patiño 28/59 1 int main(){ 2 char cad[100]; scanf("%[^n]s", cad); 3 int i = 0, nPun = 0, nDec = 0; 4 while(cad[i]){ 5 if(isdigit(cad[i])) nDec++; 6 else if(cad[i] == '.') nPun++; 7 i++;} 8 if(nDec == i) printf("Número entero."); 9 else if(nDec == i-1 && nPun == 1) printf("Número real."); 10 else printf("Número no válido.");}
  • 29. 19/09/17 Angel Vázquez-Patiño 29/59 ctype.h Ejercicio 3 ● Implemente una función que reciba una cadena y una letra, y coloque en mayúsculas cada ocurrencia de la letra (case sensitive) en la cadena (la función debe modificar la cadena en sí).
  • 30. 19/09/17 Angel Vázquez-Patiño 30/59 1 void transMayuscula(char cad[], char letra){ 2 int i=0; 3 while(cad[i]){ 4 if(cad[i] == letra) 5 cad[i]=toupper(letra); 6 i++;}} 7 int main(){ 8 char cadena[100], let; 9 scanf("%[^n]s", cadena); 10 let = getchar(); 11 transMayuscula(cadena, let); 12 printf("Cadena: %s", cadena);}
  • 32. 19/09/17 Angel Vázquez-Patiño 32/59 string.h Vea los vídeos Aprende Programación en C || Programación ATS 1) https://youtu.be/YqoV6UMQEcE 2) https://youtu.be/iW_zzg2ppvg 3) https://youtu.be/_uk3pSfTpUE 4) https://youtu.be/k2Bm1rc4LGY 5) https://youtu.be/1uBfk0Gn0io 6) https://youtu.be/qbBG8rjpOW4
  • 33. 19/09/17 Angel Vázquez-Patiño 33/59 string.h char *strcpy(char *dest, const char *src) ● Copia la cadena apuntada por src a dest char *strcat(char *dest, const char *src) ● Concatena la cadenas apuntada por src al final de la cadena apuntada por dest size_t strlen(const char *str) ● Calcula la longitud de la cadena str sin incluir el carácter nulo de terminación
  • 34. 19/09/17 Angel Vázquez-Patiño 34/59 string.h int strcmp(const char *str1, const char *str2) ● 0 si str1 = str2; <0 si str1 < str2; >0 si str1 > str2 char *strchr(const char *str, int c) ● Busca la primera ocurrencia del carácter c (un unsigned char) en la cadena apuntada por el argumento str
  • 35. 19/09/17 Angel Vázquez-Patiño 35/59 string.h char *strstr(const char *haystack, const char *needle) ● Encuentra la primera ocurrencia de la cadena needle completa (sin incluir el carácter nulo de terminación) que aparece en la cadena haystack char *strtok(char *str, const char *delim) ● Separa la cadena str en una serie de tokens separados por delim
  • 36. 19/09/17 Angel Vázquez-Patiño 36/59 #include <stdio.h> #include <string.h> int main (){ char cad1[] = "Hola "; char cad2[] = "Mundo"; char cad3[2]; strcpy(cad3, cad1); // copia cad1 en cad3 printf("strcpy(cad3, cad1): %sn", cad3); strcat(cad1, cad2); // concatena printf("strcat(cad1, cad2): %sn", cad1); // Longitud cad1 después de concatenación printf("strlen(cad1):%d", strlen(cad1));}
  • 37. 19/09/17 Angel Vázquez-Patiño 37/59 sprintf 1 #include <stdio.h> 2 int main(){ 3 char nomCom[50]; 4 char nombre[] = "Angel"; 5 char apellido[] = "Vázquez"; 6 sprintf(nomCom, "%s %s", nombre, apellido); 7 printf("Nombre completo: %s.", nomCom);}
  • 38. 19/09/17 Angel Vázquez-Patiño 38/59 string.h Ver si una cadena está dentro de otra 1 int main(){ 2 char cad[100], subcad[100]; 3 scanf("%[^n]s", cad); 4 scanf("%[^n]s", subcad); 5 if(strstr(cad, subcad) != NULL) 6 printf("Sí contiene."); 7 else 8 printf("No contiene.");}
  • 39. 19/09/17 Angel Vázquez-Patiño 39/59 string.h Posición de la primera ocurrencia de una subcadena 1 int main(){ 2 char a[] = "Hola mundo"; 3 char *b = strstr(a, "mundo"); 4 printf("b: %pn*b: %cn", b, *b); 5 printf("na: %pn*a: %cn", a, *a); 6 printf("nPosición: %i", (int)(b- a));}
  • 40. 19/09/17 Angel Vázquez-Patiño 40/59 string.h Separar una cadena en tokens 1 int main(){ 2 char str[60] = "Este es- mi curso - de C -en la -- Universidad de Cuenca"; 3 const char s[2] = "-"; char *token; 4 token = strtok(str, s);//obtiene el primer token 5 while(token != NULL){ // va a través de 6 printf( " %sn", token ); // los otros tokens 7 token = strtok(NULL, s);} 8 return(0);}
  • 41. 19/09/17 Angel Vázquez-Patiño 41/59 string.h Ejercicio ● Solicitar el ingreso de los apellidos de dos personas. Mostrar un mensaje indicando si son iguales o distintos.
  • 42. 19/09/17 Angel Vázquez-Patiño 42/59 1 int main() 2 { 3 char ape1[100], ape2[100]; 4 scanf("%s", ape1); 5 scanf("%s", ape2); 6 if(strcmp(ape1, ape2)) 7 printf("Apellidos diferentes"); 8 else 9 printf("Apellidos iguales"); 10 }
  • 43. 19/09/17 Angel Vázquez-Patiño 43/59 Conversión de tipos
  • 44. 19/09/17 Angel Vázquez-Patiño 44/59 Conversión de tipos Cadena a entero 1 #include<stdio.h> 2 #include<stdlib.h> // para atoi 3 int main(){ 4 char cadena[] = "48"; 5 int num = atoi(cadena); 6 printf("%d", num*2);}
  • 45. 19/09/17 Angel Vázquez-Patiño 45/59 Conversión de tipos Cadena a float 1 #include<stdio.h> 2 #include<stdlib.h> // para atof 3 int main(){ 4 char cadena[] = "48.098"; 5 float num = atof(cadena); 6 printf("%f", num);}
  • 46. 19/09/17 Angel Vázquez-Patiño 46/59 Conversión de tipos Entero a cadena 1 #include<stdio.h> // sprintf 2 int main(){ 3 int entero = 368; 4 char cad[4]; 5 sprintf(cad, "%d", entero); 6 printf("%s", cad);}
  • 47. 19/09/17 Angel Vázquez-Patiño 47/59 Conversión de tipos Entero a cadena ● También puede revisar la función itoa ● itoa no es estándar ● https://goo.gl/Cv7r7c
  • 48. 19/09/17 Angel Vázquez-Patiño 48/59 Conversión de tipos Flotante a cadena ● Vea https://goo.gl/KjIdgx
  • 49. 19/09/17 Angel Vázquez-Patiño 49/59 Conversión de tipos Ejercicio ● Solicitar el ingreso, como cadenas, del nombre y edad de dos personas (validar que sea una edad correcta entre 0 y 130 años). Mostrar el nombre de la persona con mayor edad.
  • 50. 19/09/17 Angel Vázquez-Patiño 50/59 1 int main(){ 2 char nom1[50],eda1[3],nom2[50],eda2[3]; 3 scanf("%s", nom1); 4 do{ scanf("%s", eda1); 5 }while(atoi(eda1)<0 || atoi(eda1)>130); 6 scanf("%s", nom2); 7 do{ scanf("%s", eda2); 8 }while(atoi(eda2)<0 || atoi(eda2)>130); 9 if(atoi(eda1) > atoi(eda2)) 10 printf("Mayor: %s", nom1); 11 else printf("Mayor: %s", nom2);}
  • 52. 19/09/17 Angel Vázquez-Patiño 52/59 Ejercicios 1) Implemente la función _Bool equals(const char *str1, const char *str2) que devuelve true/false si las cadenas enviadas como argumento son/(no son) iguales. Es case sensitive 2) Implemente la función _Bool equalsIgnoreCase(const char *str1, const char *str2) que devuelve true/false si las cadenas enviadas como argumento son/ (no son) iguales. Es no case sensitive.
  • 53. 19/09/17 Angel Vázquez-Patiño 53/59 Ejercicios 3) Implemente la función void substring(char *dest, const char *str, size_t pos) que devuelve una subcadena dest desde la posición pos hasta el final de la cadena str 4) Implemente la función void substring(char *dest, const char *str, size_t pos1, size_t pos2) que devuelve una subcadena dest desde la posición pos1 hasta la posición pos2 de la cadena str
  • 54. 19/09/17 Angel Vázquez-Patiño 54/59 Ejercicios 5) Implemente la función size_t lastIndexOf(const char *cad, const char *subcad) que da la posición de la primera ocurrencia de la subcadena subcad comparando la ocurrencia de derecha a izquierda en cad
  • 55. 19/09/17 Angel Vázquez-Patiño 55/59 Conceptos y términos importantes
  • 56. 19/09/17 Angel Vázquez-Patiño 56/59 Conceptos y términos importantes ● Maneras de leer cadenas desde el teclado ● Una cadena es un arreglo de caracteres ● Punteros ● Uso de punteros en las funciones ● Transformar caracteres o cadenas a números
  • 57. 19/09/17 Angel Vázquez-Patiño 57/59 Referencias ● Gustedt, J., 2017. Modern C. France. http://icube-icps.unistra.fr/index.php/File:Moder nC.pdf ● C - Strings, https://www.tutorialspoint.com/cprogramming/c_ strings.htm ● How do you allow spaces to be entered using scanf, https://goo.gl/UOk4e ● C Standard Library Reference Tutorial, https://www.tutorialspoint.com/c_standard_librar y/
  • 58. 19/09/17 Angel Vázquez-Patiño 58/59 Referencias ● Trim a string in C, https://goo.gl/SvJKk Revisar ● Sección 6.1. Arrays del libro de Gustedt (2017) ● Vázquez-Patiño, A., 2017. Ejercicios Básicos de Programación, 1st ed. Departamento de Ciencias de la Computación, Universidad de Cuenca, Cuenca, Ecuador. https://goo.gl/X0UTxi