Cadenas y funciones de cadena

Tensor
Cadenas y funciones de
cadena
Parte 1
Clase 10
Cadenas y funciones de cadena
• C++ ( y su lenguaje padre, C) no tiene datos predefinidos tipo
cadena (string). En su lugar, C++, como C, manipula cadenas
mediante arrays de caracteres que terminan con el carácter nulo
ASCII (‘ 0’).
• Una cadena se considera como un array unidimensional de tipo
char o unsigned char.
Cadenas y funciones de cadena
L a c a d e n a d e t e s t
L a c a d e n a d e t e s t 0
a)
b)
b) Cadena caracteres
a) Array de caracteres
Concepto de Cadena
• Una cadena es un tipo dato compuesto, un array de caracteres
(char), terminado por un carácter nulo (‘ /0’).
• Una cadena (también llamada constante de cadena o literal de
cadena) es “ABC”. Cuando la cadena aparece dentro de un
programa se verá como si se almacenaran cuatro elementos: ‘A’,
‘B’, ‘C’ y ‘0’.
Concepto de Cadena
• En consecuencia, se considera que la cadena “ABC” es un array
de cuatro elementos de tipo char.
• El valor real de esta cadena es la dirección de su primer carácter y
su tipo es un puntero char. Aplicando el operador * a un objeto de
tipo se obtiene el carácter que forma su contenido; es posible
también utilizar aritmética de direcciones con cadenas:
Concepto de Cadena
*”ABC” Es igual a ‘A’
*(“ABC” +1) Es igual a ‘B’
*(“ABC” +2) Es igual a ‘C’
*(“ABC” +3) Es igual a ‘0’
Concepto de Cadena
• De igual forma, utilizando el subíndice del array se puede escribir:
“ABC” [0] Es igual a ‘A’
“ABC” [1] Es igual a ‘B’
“ABC” [2] Es igual a ‘C’
“ABC” [3] Es igual a ‘0’
Declaración de variables de cadena
• Las cadenas se declaran como los restantes tipos de arrays. El
operador postfijo [ ] contiene el tamaño máximo del objeto. El
tipo base, naturalmente, es char, o bien unsigned char.
Declaración de variables de cadena
Declaración de variables de cadena
• El tipo unsigned char puede ser de interés en aquellos casos
en que los caracteres especiales presentes puedan tener el
bit de orden alto activado. Si el carácter se considera con
signo, el bit de mayor peso (orden alto) se interpreta como
bit de signo y se puede propagar a la posición de mayor
orden (peso) de nuevo tipo.
Declaración de variables de cadena
• Observe que el tamaño de la cadena ha de incluir el
carácter ‘0’. En consecuencia, para definir un array de
caracteres que contenga la cadena “ABC-DEF”, escriba:
Inicialización de variables de cadena
• Todos los tipos de arrays requieren una inicialización que
consiste en una lista de valores separados por comas y
encerrados entre llaves.
Inicialización de variables de cadena
• Dado que en el literal hay 36 caracteres y el compilador
añade el carácter ‘0’, un total de 37 caracteres se
asignarán a cadenatest.
• Ahora bien, una dena no se puede inicializar fuera de la
declaración. Por ejemplo, si se trata de hacer
Inicialización de variables de cadena
• C++ le dará un error al compilar. La razón es que un identificador
de cadena, como cualquier identificador de Array, se trata como
un valor de dirección.
• ¿Cómo se puede inicializar una cadena fuera de la declaración?
Más adelante se verá, pero podemos indicar que será necesario
utilizar una función de cadena denominada strcpy ( ).
Inicialización de variables de cadena
• La lectura usual de datos con el objeto cin y el operador
>>, cuando se aplica a datos de cadena, producirá
normalmente anomalías. Así, por ejemplo, trate de
ejecutar el siguiente programa:
Inicialización de variables de cadena
Inicialización de variables de cadena
• El programa define Nombre como un array de caracteres
de 30 elementos. Suponga que introduce la entrada Pepe
Mackoy, cuando ejecuta el programa se visualizara en
pantalla Pepe. Es decir la palabra Mackoy no se ha
asignado a la variable cadena Nombre.
Inicialización de variables de cadena
• La razón es que el objeto cin termina la operación de lectura
siempre que se encuentra en un espacio en blanco.
• Así pues, ¿Cuál será el método correcto para lectura de
cadenas, cuando estas cadenas, contienen mas de una
palabra (caso muy usual)?
Inicialización de variables de cadena
• El método recomendado será utilizar una función
denominada getline( ), en unión con cin, en lugar del
operador >>. La función getline permitirá a cin leer la
cadena completa, incluyendo cualquier espacio en
blanco.
Inicialización de variables de cadena
• cin es un objeto de la clase istream y getline ( ) es una
función miembro de la clase iostream; en consecuencia,
cin puede llamar a getline ( ) para leer una línea
completa incluyendo cualquier espacio en blanco.
Inicialización de variables de cadena
• La sintaxis de la función getline ( ) es:
Inicialización de variables de cadena
• La lectura de cadenas con cin se realiza con el siguiente
formato:
Inicialización de variables de cadena
• La función getline ( ) utiliza tres argumentos. El primer
argumento es el identificador de la variable cadena (nombre
de la cadena). El segundo argumento es la longitud máxima
de la cadena (él numero máximo de caracteres que se
leerán), que debe ser al menos dos caracteres mayor que la
cadena real, para permitir el carácter nulo ‘0’y el ‘n’.
Inicialización de variables de cadena
• Por ultimo, el carácter separador se lee y almacena
como el siguiente al ultimo carácter de la cadena. La
función getline ( ) inserta automáticamente el carácter
núlo como le ultimo carácter de la cadena.
Inicialización de variables de cadena
• El ejemplo anterior para leer la cadena Nombre se
convierte en:
Inicialización de variables de cadena
Inicialización de variables de cadena
• Si se introduce la cadena Pepe Markov, el Array Nombre almacenará los
caracteres siguientes:
• Nombre
• [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]
P e P e M a r k o y ‘n’ ‘0’ … datos
aleatorio
s
Ejemplo
Ejemplo
Cadenas y funciones de cadena
• El siguiente programa lee y escribe el nombre, dirección y teléfono
de un usuario
Cadenas y funciones de cadena
• Esto es muy sencillo si usamos la función cin.getline( ); Esta función necesita
tres datos o parámetros:
• Nombre. El nombre de la variable que va a contener el string
• Longitud. La cantidad de caracteres que queremos que se puedan introducir
(nunca mayor que la longitud del string).
• Carácter de fin. El carácter que el usuario va usar como final de la cadena. Por
lo general es el ‘enter’ que se representa como ‘n’ (diagonal n).
Cadenas y funciones de cadena
La Biblioteca String.h
• La biblioteca estándar de C++ contiene la biblioteca de cadena
STRING.H, que contiene las funciones de manipulación de cadenas
utilizadas mas frecuentemente.
• Los archivos de cabecera STDIO.H e IOSTREAM.H también soportan E/S
de cadenas. Algunos fabricantes de C++ también incorporan otras
bibliotecas para manipular cadenas, pero como no son estándar no se
consideraran en esta sesión.
La Biblioteca String.h
• El uso de las funciones de cadena tienen una variable parámetros
a declarada similar a:
La Biblioteca String.h
• Esto significa que la función esperar un puntero a una cadena.
Cuando se utiliza la función, se puede usar un puntero a una
cadena o se puede especificar el nombre de una variable array
char. La Tabla 1 resume algunas de las funciones cadena más
usuales.
La Biblioteca String.h
Función Cabecera de la función y prototipo
strlen size_t strlen(const char *s);
Devuelve la longitud de la cadena s.
strcpy char * strcpy(char *dest, const char *fuente);
Copia la cadena fuente a la cadena destino
strcmp in strcmp(const char *s1, const char *s2);
Compara la cadena s1 a s2 y devuelve:
0 si s1 = s2
<0 si s1 < s2
>0 si s1 > s2
strcmpi int strcmpi(const char *s1, const char *s2);
Igual que strcmp( ), pero trata los caracteres como
si fueran todos minusculas
strcat char *strcat(char *destino, const char *fuente);
Añade la cadena fuente al final de destino
strnset char *strnset(char *s, int ch, size_t n);
Utiliza strcmp( ) sobre una cadena existente par
fijar n bytes de la cadena al carácter ch.
strstr char *strstr(const char *s1, const char *s2);
Busca la cadena s2 en s1 y devuelve un puntero a
los caracteres donde se encuentra s2.
La palabra reservada const
• Las funciones de cadena declaradas en STRING.H, recogidas en la
Tabla 1 y algunas otras, incluyen la palabra reservada const. La
ventaja de esta palabra reservada es que se puede ver
rápidamente la diferencia entre los parámetros de entrada y
salida.
La palabra reservada const
• Por ejemplo, el segundo parámetro fuente de strcpy representa el
área fuente; se utiliza solo para copiar los caracteres de ella, de
modo que esta área no se modificara. La palabra reservada const
se utiliza para esta tarea.
• Se considera un parámetro de entrada, ya que la función recibe
datos a través de ella.
La palabra reservada const
• En contraste el primer parámetro dest de strcmpy es el área de
destino, la cual se sobrescribirá y, por consiguiente, no se debe
utilizar const para ello. En este caso, el parámetro
correspondiente se denomina parámetro de salida, ya que los
datos se escriben en el área destino.
Arrays y Cadenas como parámetros de
funciones
• Los arrays y cadenas se pueden pasar solo por referencia, no por
valor. En la función, las referencias a los elementos individuales se
hacen por indirección de la dirección objeto.
Arrays y Cadenas como parámetros de
funciones
• Considérese el programa C++ PASARRAY.CPP, que implementa una
función Longitud( ) que calcula la longitud de una cadena
terminada en nulo. El parámetro cad se declara como un array de
caracteres de tamaño desconocido.
• Este ejemplo es un caso que muestra el paso de un array por
valor, método no recomendado.
Arrays y Cadenas como parámetros de
funciones
Arrays y Cadenas como parámetros de
funciones
Arrays y Cadenas como parámetros de
funciones
• El programa principal contiene el código para la
dirección de la constante de cadena a la función
Longitud ( ). El cuerpo bucle while dentro de la función
cuenta con los caracteres no nulos y termina cuando se
encuentra el byte nulo al final de la cadena.
Uso del operador de referencia para tipos
array
• Otro método de escribir la función Longitud ( ) es utilizar
el operador de referencia & C++. Cuando se utiliza este
operador, se pasa por el parámetro por referencia.
Uso del operador de referencia para tipos
array
• Se puede dar un nombre nuevo a cualquier tipo de datos mediante typedef.
• La sintaxis es typedef declaración;
• donde declaración tiene la forma de una declaración de variable, sólo que se
está definiendo un tipo de datos.
• typedef long pareja [2];
Uso del operador de referencia para tipos
array
• define un tipo pareja que se puede usar en declaraciones de variables:
• pareja p;
• es equivalente a
• long p [2];
Uso del operador de referencia para tipos
array
Uso del operador de referencia para tipos
array
Uso de punteros para pasar una cadena
• Los punteros se pueden utilizar para pasar arrays a funciones:
Uso de punteros para pasar una cadena
Uso de punteros para pasar una cadena
• Observe que en las declaraciones de parámetros ningún array esta definido sino
punteros tipo char. En la línea:
• *dest++ = *fuente++;
• Los punteros se utilizan para acceder a las cadenas fuente y destino,
respectivamente. En la llamada a la función extraer se utiliza el operador &
para obtener la dirección de las cadenas fuente y destino.
Asignación de Cadenas
• C++ soporta dos métodos para asignar cadenas. Uno de ellos se ha visto cuando
se inicializan las variables de cadena. La sintaxis utilizada era
Ejemplo
• C++ soporta dos métodos para asignar cadenas. Uno de ellos se ha visto cuando
se inicializan las variables de cadena. La sintaxis utilizada era
Ejemplo
• El segundo método para asignación de una cadena a otra es utilizar la función
strcpy. La función strcpy copia los caracteres de la cadena fuente a la carpeta
destino. La funcione supone que la cadena destino tiene espacio suficiente
para contener toda la cadena fuente. El prototipo de función es:
Ejemplo
Ejemplo
• La función strcpy( ) copia “Cadena a copiar” en la cadena nombre
y añade un carácter nulo al final de la cadena resultante. El
siguiente programa muestra una aplicación de strcpy ( ).
Ejemplo
Ejemplo
1 de 59

Recomendados

Manejo de puntero spresentacion por
Manejo de puntero spresentacionManejo de puntero spresentacion
Manejo de puntero spresentacionmaritzatoapanta28
7.7K vistas16 diapositivas
Caracteres y Cadenas en C por
Caracteres y Cadenas en CCaracteres y Cadenas en C
Caracteres y Cadenas en CRonny Parra
37.1K vistas15 diapositivas
Unidad 6 por
Unidad 6Unidad 6
Unidad 6Angeles Quezada
3.8K vistas65 diapositivas
Automatas de pila por
Automatas de pilaAutomatas de pila
Automatas de pilaVirginia Quispe Colque
15.4K vistas16 diapositivas
Ficheros de cabecera por
Ficheros de cabecera Ficheros de cabecera
Ficheros de cabecera cecibelencalada
3.8K vistas7 diapositivas
Formato ieee por
Formato ieeeFormato ieee
Formato ieeeCamilo Huertas
11.1K vistas4 diapositivas

Más contenido relacionado

La actualidad más candente

Problema de las 8 reinas por
Problema de las 8 reinasProblema de las 8 reinas
Problema de las 8 reinasEsteban Gonzalez
23.1K vistas11 diapositivas
Expresiones regulares por
Expresiones regularesExpresiones regulares
Expresiones regularesJordan-P
6.6K vistas52 diapositivas
Estructuras en c++ por
Estructuras en c++Estructuras en c++
Estructuras en c++Cesar Oswaldo Osorio Agualongo
19.7K vistas46 diapositivas
Listas doblemente enlazadas por
Listas doblemente enlazadasListas doblemente enlazadas
Listas doblemente enlazadasDĴäîřo Lêmä
11.6K vistas18 diapositivas
Búsqueda Primero el Mejor por
Búsqueda Primero el MejorBúsqueda Primero el Mejor
Búsqueda Primero el MejorTutor4uDev
16.4K vistas11 diapositivas
hashing y colisiones por
hashing y colisioneshashing y colisiones
hashing y colisionesemiru48
4.6K vistas18 diapositivas

La actualidad más candente(20)

Expresiones regulares por Jordan-P
Expresiones regularesExpresiones regulares
Expresiones regulares
Jordan-P6.6K vistas
Búsqueda Primero el Mejor por Tutor4uDev
Búsqueda Primero el MejorBúsqueda Primero el Mejor
Búsqueda Primero el Mejor
Tutor4uDev16.4K vistas
hashing y colisiones por emiru48
hashing y colisioneshashing y colisiones
hashing y colisiones
emiru484.6K vistas
Tipos de gramatica y arboles de derivacion por jorge severino
Tipos de gramatica y arboles de derivacionTipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacion
jorge severino1.6K vistas
Fundamentos de programación librería string C++ por Milton Nicolay
Fundamentos de programación librería string C++Fundamentos de programación librería string C++
Fundamentos de programación librería string C++
Milton Nicolay13.1K vistas
2...2 expresiones regulares, cerradura, fractales, automata por Jacqui Venegas
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata
Jacqui Venegas8.8K vistas
Automatas Finitos Deterministicos y No Deterministicos por Rosviannis Barreiro
Automatas Finitos Deterministicos y No DeterministicosAutomatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No Deterministicos
Rosviannis Barreiro8.8K vistas
Algoritmo de listas simples completo por Boris Salleg
Algoritmo de listas simples  completoAlgoritmo de listas simples  completo
Algoritmo de listas simples completo
Boris Salleg20.2K vistas
Java pilas (Stacks) y colas (Queues) por Juan Astudillo
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)
Juan Astudillo119K vistas

Destacado

Cuckoo sandbox por
Cuckoo sandboxCuckoo sandbox
Cuckoo sandboxTensor
525 vistas38 diapositivas
Ley de kirchhoff por
Ley de kirchhoffLey de kirchhoff
Ley de kirchhoffgreybili
73.7K vistas16 diapositivas
Sentencia, secuencia y bloque por
Sentencia, secuencia y bloqueSentencia, secuencia y bloque
Sentencia, secuencia y bloqueTensor
731 vistas32 diapositivas
Ley de ampere por
Ley de ampereLey de ampere
Ley de ampereeduardo alonzo
3.5K vistas15 diapositivas
Clase 16 ley de biot savart por
Clase 16 ley de biot savartClase 16 ley de biot savart
Clase 16 ley de biot savartTensor
28.8K vistas39 diapositivas
Clase 5 LKV por
Clase 5 LKVClase 5 LKV
Clase 5 LKVTensor
2.9K vistas45 diapositivas

Destacado(20)

Cuckoo sandbox por Tensor
Cuckoo sandboxCuckoo sandbox
Cuckoo sandbox
Tensor525 vistas
Ley de kirchhoff por greybili
Ley de kirchhoffLey de kirchhoff
Ley de kirchhoff
greybili73.7K vistas
Sentencia, secuencia y bloque por Tensor
Sentencia, secuencia y bloqueSentencia, secuencia y bloque
Sentencia, secuencia y bloque
Tensor731 vistas
Clase 16 ley de biot savart por Tensor
Clase 16 ley de biot savartClase 16 ley de biot savart
Clase 16 ley de biot savart
Tensor28.8K vistas
Clase 5 LKV por Tensor
Clase 5 LKVClase 5 LKV
Clase 5 LKV
Tensor2.9K vistas
Física2 bach 9.4 ley de lorentz por Tarpafar
Física2 bach 9.4 ley de lorentzFísica2 bach 9.4 ley de lorentz
Física2 bach 9.4 ley de lorentz
Tarpafar1.7K vistas
Clase 10 ley de biot savart por Tensor
Clase 10 ley de biot savartClase 10 ley de biot savart
Clase 10 ley de biot savart
Tensor1.1K vistas
Armitage pruebas por Tensor
Armitage pruebasArmitage pruebas
Armitage pruebas
Tensor431 vistas
Sentencia, secuencia y bloque por Tensor
Sentencia, secuencia y bloqueSentencia, secuencia y bloque
Sentencia, secuencia y bloque
Tensor261 vistas
Condicional if en c++ por Tensor
Condicional if en c++Condicional if en c++
Condicional if en c++
Tensor3.4K vistas
Método de la regla falsa (o metodo de la falsa posición) por Tensor
Método de la regla falsa (o metodo de la falsa posición)Método de la regla falsa (o metodo de la falsa posición)
Método de la regla falsa (o metodo de la falsa posición)
Tensor2.4K vistas
Introducción por Tensor
IntroducciónIntroducción
Introducción
Tensor534 vistas
Ley de-biot-savart-electromagnetismo por Aly Olvera
Ley de-biot-savart-electromagnetismoLey de-biot-savart-electromagnetismo
Ley de-biot-savart-electromagnetismo
Aly Olvera4.5K vistas
Ley de ampere. ITO por Juan Toledo
Ley de ampere. ITOLey de ampere. ITO
Ley de ampere. ITO
Juan Toledo15.6K vistas
Elementos basicos c++ por Tensor
Elementos basicos c++Elementos basicos c++
Elementos basicos c++
Tensor2.1K vistas
Clase 5 ley de biot savart por Tensor
Clase 5 ley de biot savartClase 5 ley de biot savart
Clase 5 ley de biot savart
Tensor727 vistas
Elicitacion de requerimientos por Tensor
Elicitacion de requerimientosElicitacion de requerimientos
Elicitacion de requerimientos
Tensor4.5K vistas
Simulación en promodel clase 04 por Tensor
Simulación en promodel clase 04Simulación en promodel clase 04
Simulación en promodel clase 04
Tensor10.1K vistas

Similar a Cadenas y funciones de cadena

Pe15 cadenacaracteres por
Pe15 cadenacaracteresPe15 cadenacaracteres
Pe15 cadenacaracteresMarco Antonio Plascencia
194 vistas9 diapositivas
Cadenas por
CadenasCadenas
CadenasIng Arturo madrid
277 vistas16 diapositivas
Cadenas de Caracteres por
Cadenas de CaracteresCadenas de Caracteres
Cadenas de CaracteresAndres Chiriboga
314 vistas7 diapositivas
Asignacion por
AsignacionAsignacion
AsignacionFernando Solis
70 vistas9 diapositivas
6.2 cadenas de caracteres por
6.2 cadenas de caracteres6.2 cadenas de caracteres
6.2 cadenas de caracteresSNPP
83 vistas4 diapositivas
Cadena Juan Bastidas por
Cadena Juan BastidasCadena Juan Bastidas
Cadena Juan BastidasJuan Bastidas
967 vistas10 diapositivas

Similar a Cadenas y funciones de cadena(20)

6.2 cadenas de caracteres por SNPP
6.2 cadenas de caracteres6.2 cadenas de caracteres
6.2 cadenas de caracteres
SNPP83 vistas
Capitulo 8 Cadenas por guest506dc9
Capitulo 8  CadenasCapitulo 8  Cadenas
Capitulo 8 Cadenas
guest506dc912.9K vistas
Uso de las clases iostream por Tensor
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostream
Tensor1.1K vistas
!Prograc8 por robertoxe
!Prograc8!Prograc8
!Prograc8
robertoxe394 vistas
Cadenas De Caracteres por Mauricio
Cadenas De CaracteresCadenas De Caracteres
Cadenas De Caracteres
Mauricio5K vistas
Longitud de cadena y funciones en java por Robert Wolf
Longitud de cadena y funciones en javaLongitud de cadena y funciones en java
Longitud de cadena y funciones en java
Robert Wolf11.3K vistas
Escuela Politecnica Del Ejercito por wilpto
Escuela Politecnica Del EjercitoEscuela Politecnica Del Ejercito
Escuela Politecnica Del Ejercito
wilpto154 vistas

Más de Tensor

Libertad por
LibertadLibertad
LibertadTensor
6K vistas2 diapositivas
Metodo de la bisección por
Metodo de la bisecciónMetodo de la bisección
Metodo de la bisecciónTensor
1.1K vistas31 diapositivas
Transito vehicular por
Transito vehicularTransito vehicular
Transito vehicularTensor
805 vistas45 diapositivas
Teoria de colas por
Teoria de colasTeoria de colas
Teoria de colasTensor
727 vistas7 diapositivas
Practica 7 2016 por
Practica 7 2016Practica 7 2016
Practica 7 2016Tensor
828 vistas11 diapositivas
Practica 6 2016 por
Practica 6 2016Practica 6 2016
Practica 6 2016Tensor
479 vistas19 diapositivas

Más de Tensor(20)

Libertad por Tensor
LibertadLibertad
Libertad
Tensor6K vistas
Metodo de la bisección por Tensor
Metodo de la bisecciónMetodo de la bisección
Metodo de la bisección
Tensor1.1K vistas
Transito vehicular por Tensor
Transito vehicularTransito vehicular
Transito vehicular
Tensor805 vistas
Teoria de colas por Tensor
Teoria de colasTeoria de colas
Teoria de colas
Tensor727 vistas
Practica 7 2016 por Tensor
Practica 7 2016Practica 7 2016
Practica 7 2016
Tensor828 vistas
Practica 6 2016 por Tensor
Practica 6 2016Practica 6 2016
Practica 6 2016
Tensor479 vistas
Game maker por Tensor
Game makerGame maker
Game maker
Tensor688 vistas
Practica 5 2016 por Tensor
Practica 5 2016Practica 5 2016
Practica 5 2016
Tensor250 vistas
Procesamiento de archivos por Tensor
Procesamiento de archivosProcesamiento de archivos
Procesamiento de archivos
Tensor327 vistas
Reduccion de orden por Tensor
Reduccion de ordenReduccion de orden
Reduccion de orden
Tensor1.3K vistas
Variación+de+parametros por Tensor
Variación+de+parametrosVariación+de+parametros
Variación+de+parametros
Tensor989 vistas
Coeficientes indeterminados enfoque de superposición por Tensor
Coeficientes indeterminados   enfoque de superposiciónCoeficientes indeterminados   enfoque de superposición
Coeficientes indeterminados enfoque de superposición
Tensor4.1K vistas
Bernoulli y ricatti por Tensor
Bernoulli y ricattiBernoulli y ricatti
Bernoulli y ricatti
Tensor1.4K vistas
Practica no. 3 tiempo de servicio por Tensor
Practica no. 3 tiempo de servicioPractica no. 3 tiempo de servicio
Practica no. 3 tiempo de servicio
Tensor588 vistas
Clase 14 ondas reflejadas por Tensor
Clase 14 ondas reflejadasClase 14 ondas reflejadas
Clase 14 ondas reflejadas
Tensor493 vistas
Ondas em por Tensor
Ondas emOndas em
Ondas em
Tensor1.3K vistas
Clase 7 ondas electromagneticas por Tensor
Clase 7 ondas electromagneticasClase 7 ondas electromagneticas
Clase 7 ondas electromagneticas
Tensor1.3K vistas
Practicas 8 2016 por Tensor
Practicas 8 2016Practicas 8 2016
Practicas 8 2016
Tensor479 vistas
Tipos de datos ok por Tensor
Tipos de datos okTipos de datos ok
Tipos de datos ok
Tensor1.2K vistas
Practica 4 2016 por Tensor
Practica 4 2016Practica 4 2016
Practica 4 2016
Tensor418 vistas

Último

Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptx por
Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptxUnidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptx
Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptxblogdealgebraunad
28 vistas25 diapositivas
elementos-marketing-digital.pdf por
elementos-marketing-digital.pdfelementos-marketing-digital.pdf
elementos-marketing-digital.pdfestefanimilenca
55 vistas157 diapositivas
Discurso a través de chat por
Discurso a través de chatDiscurso a través de chat
Discurso a través de chatAnthonyAguilera11
46 vistas37 diapositivas
PLANO CARTESIANOPARA NIÑOS.pptx por
PLANO CARTESIANOPARA NIÑOS.pptxPLANO CARTESIANOPARA NIÑOS.pptx
PLANO CARTESIANOPARA NIÑOS.pptxCarlos Campaña Montenegro
150 vistas28 diapositivas
Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda. por
Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda. Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda.
Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda. IvanLechuga
65 vistas4 diapositivas
Funciones, límites y continuidad por
Funciones, límites y continuidadFunciones, límites y continuidad
Funciones, límites y continuidadAngel Vázquez Patiño
300 vistas340 diapositivas

Último(20)

Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptx por blogdealgebraunad
Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptxUnidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptx
Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptx
blogdealgebraunad28 vistas
Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda. por IvanLechuga
Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda. Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda.
Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda.
IvanLechuga65 vistas
HISTORIA del café que se estableció .pdf por carmenhuallpa45
HISTORIA del café que se estableció .pdfHISTORIA del café que se estableció .pdf
HISTORIA del café que se estableció .pdf
carmenhuallpa45110 vistas
Fracciones Generatrices y Sumas Infinitas - Santiago Cruz Garcia por SantiagoCruzGarca
Fracciones Generatrices y  Sumas Infinitas - Santiago Cruz GarciaFracciones Generatrices y  Sumas Infinitas - Santiago Cruz Garcia
Fracciones Generatrices y Sumas Infinitas - Santiago Cruz Garcia
SantiagoCruzGarca115 vistas
Intranet y extranet cuadro comparativo.pdf por UPTVT
Intranet y extranet cuadro comparativo.pdfIntranet y extranet cuadro comparativo.pdf
Intranet y extranet cuadro comparativo.pdf
UPTVT32 vistas
Fase 4- Estudio de la geometría analítica.pptx por blogdealgebraunad
Fase 4- Estudio de la geometría analítica.pptxFase 4- Estudio de la geometría analítica.pptx
Fase 4- Estudio de la geometría analítica.pptx
blogdealgebraunad39 vistas
RES 2796-023 A 33(2).pdf por gabitachica
RES 2796-023 A 33(2).pdfRES 2796-023 A 33(2).pdf
RES 2796-023 A 33(2).pdf
gabitachica39 vistas

Cadenas y funciones de cadena

  • 1. Cadenas y funciones de cadena Parte 1 Clase 10
  • 2. Cadenas y funciones de cadena • C++ ( y su lenguaje padre, C) no tiene datos predefinidos tipo cadena (string). En su lugar, C++, como C, manipula cadenas mediante arrays de caracteres que terminan con el carácter nulo ASCII (‘ 0’). • Una cadena se considera como un array unidimensional de tipo char o unsigned char.
  • 3. Cadenas y funciones de cadena L a c a d e n a d e t e s t L a c a d e n a d e t e s t 0 a) b) b) Cadena caracteres a) Array de caracteres
  • 4. Concepto de Cadena • Una cadena es un tipo dato compuesto, un array de caracteres (char), terminado por un carácter nulo (‘ /0’). • Una cadena (también llamada constante de cadena o literal de cadena) es “ABC”. Cuando la cadena aparece dentro de un programa se verá como si se almacenaran cuatro elementos: ‘A’, ‘B’, ‘C’ y ‘0’.
  • 5. Concepto de Cadena • En consecuencia, se considera que la cadena “ABC” es un array de cuatro elementos de tipo char. • El valor real de esta cadena es la dirección de su primer carácter y su tipo es un puntero char. Aplicando el operador * a un objeto de tipo se obtiene el carácter que forma su contenido; es posible también utilizar aritmética de direcciones con cadenas:
  • 6. Concepto de Cadena *”ABC” Es igual a ‘A’ *(“ABC” +1) Es igual a ‘B’ *(“ABC” +2) Es igual a ‘C’ *(“ABC” +3) Es igual a ‘0’
  • 7. Concepto de Cadena • De igual forma, utilizando el subíndice del array se puede escribir: “ABC” [0] Es igual a ‘A’ “ABC” [1] Es igual a ‘B’ “ABC” [2] Es igual a ‘C’ “ABC” [3] Es igual a ‘0’
  • 8. Declaración de variables de cadena • Las cadenas se declaran como los restantes tipos de arrays. El operador postfijo [ ] contiene el tamaño máximo del objeto. El tipo base, naturalmente, es char, o bien unsigned char.
  • 10. Declaración de variables de cadena • El tipo unsigned char puede ser de interés en aquellos casos en que los caracteres especiales presentes puedan tener el bit de orden alto activado. Si el carácter se considera con signo, el bit de mayor peso (orden alto) se interpreta como bit de signo y se puede propagar a la posición de mayor orden (peso) de nuevo tipo.
  • 11. Declaración de variables de cadena • Observe que el tamaño de la cadena ha de incluir el carácter ‘0’. En consecuencia, para definir un array de caracteres que contenga la cadena “ABC-DEF”, escriba:
  • 12. Inicialización de variables de cadena • Todos los tipos de arrays requieren una inicialización que consiste en una lista de valores separados por comas y encerrados entre llaves.
  • 13. Inicialización de variables de cadena • Dado que en el literal hay 36 caracteres y el compilador añade el carácter ‘0’, un total de 37 caracteres se asignarán a cadenatest. • Ahora bien, una dena no se puede inicializar fuera de la declaración. Por ejemplo, si se trata de hacer
  • 14. Inicialización de variables de cadena • C++ le dará un error al compilar. La razón es que un identificador de cadena, como cualquier identificador de Array, se trata como un valor de dirección. • ¿Cómo se puede inicializar una cadena fuera de la declaración? Más adelante se verá, pero podemos indicar que será necesario utilizar una función de cadena denominada strcpy ( ).
  • 15. Inicialización de variables de cadena • La lectura usual de datos con el objeto cin y el operador >>, cuando se aplica a datos de cadena, producirá normalmente anomalías. Así, por ejemplo, trate de ejecutar el siguiente programa:
  • 17. Inicialización de variables de cadena • El programa define Nombre como un array de caracteres de 30 elementos. Suponga que introduce la entrada Pepe Mackoy, cuando ejecuta el programa se visualizara en pantalla Pepe. Es decir la palabra Mackoy no se ha asignado a la variable cadena Nombre.
  • 18. Inicialización de variables de cadena • La razón es que el objeto cin termina la operación de lectura siempre que se encuentra en un espacio en blanco. • Así pues, ¿Cuál será el método correcto para lectura de cadenas, cuando estas cadenas, contienen mas de una palabra (caso muy usual)?
  • 19. Inicialización de variables de cadena • El método recomendado será utilizar una función denominada getline( ), en unión con cin, en lugar del operador >>. La función getline permitirá a cin leer la cadena completa, incluyendo cualquier espacio en blanco.
  • 20. Inicialización de variables de cadena • cin es un objeto de la clase istream y getline ( ) es una función miembro de la clase iostream; en consecuencia, cin puede llamar a getline ( ) para leer una línea completa incluyendo cualquier espacio en blanco.
  • 21. Inicialización de variables de cadena • La sintaxis de la función getline ( ) es:
  • 22. Inicialización de variables de cadena • La lectura de cadenas con cin se realiza con el siguiente formato:
  • 23. Inicialización de variables de cadena • La función getline ( ) utiliza tres argumentos. El primer argumento es el identificador de la variable cadena (nombre de la cadena). El segundo argumento es la longitud máxima de la cadena (él numero máximo de caracteres que se leerán), que debe ser al menos dos caracteres mayor que la cadena real, para permitir el carácter nulo ‘0’y el ‘n’.
  • 24. Inicialización de variables de cadena • Por ultimo, el carácter separador se lee y almacena como el siguiente al ultimo carácter de la cadena. La función getline ( ) inserta automáticamente el carácter núlo como le ultimo carácter de la cadena.
  • 25. Inicialización de variables de cadena • El ejemplo anterior para leer la cadena Nombre se convierte en:
  • 27. Inicialización de variables de cadena • Si se introduce la cadena Pepe Markov, el Array Nombre almacenará los caracteres siguientes: • Nombre • [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] P e P e M a r k o y ‘n’ ‘0’ … datos aleatorio s
  • 30. Cadenas y funciones de cadena • El siguiente programa lee y escribe el nombre, dirección y teléfono de un usuario
  • 31. Cadenas y funciones de cadena • Esto es muy sencillo si usamos la función cin.getline( ); Esta función necesita tres datos o parámetros: • Nombre. El nombre de la variable que va a contener el string • Longitud. La cantidad de caracteres que queremos que se puedan introducir (nunca mayor que la longitud del string). • Carácter de fin. El carácter que el usuario va usar como final de la cadena. Por lo general es el ‘enter’ que se representa como ‘n’ (diagonal n).
  • 32. Cadenas y funciones de cadena
  • 33. La Biblioteca String.h • La biblioteca estándar de C++ contiene la biblioteca de cadena STRING.H, que contiene las funciones de manipulación de cadenas utilizadas mas frecuentemente. • Los archivos de cabecera STDIO.H e IOSTREAM.H también soportan E/S de cadenas. Algunos fabricantes de C++ también incorporan otras bibliotecas para manipular cadenas, pero como no son estándar no se consideraran en esta sesión.
  • 34. La Biblioteca String.h • El uso de las funciones de cadena tienen una variable parámetros a declarada similar a:
  • 35. La Biblioteca String.h • Esto significa que la función esperar un puntero a una cadena. Cuando se utiliza la función, se puede usar un puntero a una cadena o se puede especificar el nombre de una variable array char. La Tabla 1 resume algunas de las funciones cadena más usuales.
  • 36. La Biblioteca String.h Función Cabecera de la función y prototipo strlen size_t strlen(const char *s); Devuelve la longitud de la cadena s. strcpy char * strcpy(char *dest, const char *fuente); Copia la cadena fuente a la cadena destino strcmp in strcmp(const char *s1, const char *s2); Compara la cadena s1 a s2 y devuelve: 0 si s1 = s2 <0 si s1 < s2 >0 si s1 > s2 strcmpi int strcmpi(const char *s1, const char *s2); Igual que strcmp( ), pero trata los caracteres como si fueran todos minusculas strcat char *strcat(char *destino, const char *fuente); Añade la cadena fuente al final de destino strnset char *strnset(char *s, int ch, size_t n); Utiliza strcmp( ) sobre una cadena existente par fijar n bytes de la cadena al carácter ch. strstr char *strstr(const char *s1, const char *s2); Busca la cadena s2 en s1 y devuelve un puntero a los caracteres donde se encuentra s2.
  • 37. La palabra reservada const • Las funciones de cadena declaradas en STRING.H, recogidas en la Tabla 1 y algunas otras, incluyen la palabra reservada const. La ventaja de esta palabra reservada es que se puede ver rápidamente la diferencia entre los parámetros de entrada y salida.
  • 38. La palabra reservada const • Por ejemplo, el segundo parámetro fuente de strcpy representa el área fuente; se utiliza solo para copiar los caracteres de ella, de modo que esta área no se modificara. La palabra reservada const se utiliza para esta tarea. • Se considera un parámetro de entrada, ya que la función recibe datos a través de ella.
  • 39. La palabra reservada const • En contraste el primer parámetro dest de strcmpy es el área de destino, la cual se sobrescribirá y, por consiguiente, no se debe utilizar const para ello. En este caso, el parámetro correspondiente se denomina parámetro de salida, ya que los datos se escriben en el área destino.
  • 40. Arrays y Cadenas como parámetros de funciones • Los arrays y cadenas se pueden pasar solo por referencia, no por valor. En la función, las referencias a los elementos individuales se hacen por indirección de la dirección objeto.
  • 41. Arrays y Cadenas como parámetros de funciones • Considérese el programa C++ PASARRAY.CPP, que implementa una función Longitud( ) que calcula la longitud de una cadena terminada en nulo. El parámetro cad se declara como un array de caracteres de tamaño desconocido. • Este ejemplo es un caso que muestra el paso de un array por valor, método no recomendado.
  • 42. Arrays y Cadenas como parámetros de funciones
  • 43. Arrays y Cadenas como parámetros de funciones
  • 44. Arrays y Cadenas como parámetros de funciones • El programa principal contiene el código para la dirección de la constante de cadena a la función Longitud ( ). El cuerpo bucle while dentro de la función cuenta con los caracteres no nulos y termina cuando se encuentra el byte nulo al final de la cadena.
  • 45. Uso del operador de referencia para tipos array • Otro método de escribir la función Longitud ( ) es utilizar el operador de referencia & C++. Cuando se utiliza este operador, se pasa por el parámetro por referencia.
  • 46. Uso del operador de referencia para tipos array • Se puede dar un nombre nuevo a cualquier tipo de datos mediante typedef. • La sintaxis es typedef declaración; • donde declaración tiene la forma de una declaración de variable, sólo que se está definiendo un tipo de datos. • typedef long pareja [2];
  • 47. Uso del operador de referencia para tipos array • define un tipo pareja que se puede usar en declaraciones de variables: • pareja p; • es equivalente a • long p [2];
  • 48. Uso del operador de referencia para tipos array
  • 49. Uso del operador de referencia para tipos array
  • 50. Uso de punteros para pasar una cadena • Los punteros se pueden utilizar para pasar arrays a funciones:
  • 51. Uso de punteros para pasar una cadena
  • 52. Uso de punteros para pasar una cadena • Observe que en las declaraciones de parámetros ningún array esta definido sino punteros tipo char. En la línea: • *dest++ = *fuente++; • Los punteros se utilizan para acceder a las cadenas fuente y destino, respectivamente. En la llamada a la función extraer se utiliza el operador & para obtener la dirección de las cadenas fuente y destino.
  • 53. Asignación de Cadenas • C++ soporta dos métodos para asignar cadenas. Uno de ellos se ha visto cuando se inicializan las variables de cadena. La sintaxis utilizada era
  • 54. Ejemplo • C++ soporta dos métodos para asignar cadenas. Uno de ellos se ha visto cuando se inicializan las variables de cadena. La sintaxis utilizada era
  • 55. Ejemplo • El segundo método para asignación de una cadena a otra es utilizar la función strcpy. La función strcpy copia los caracteres de la cadena fuente a la carpeta destino. La funcione supone que la cadena destino tiene espacio suficiente para contener toda la cadena fuente. El prototipo de función es:
  • 57. Ejemplo • La función strcpy( ) copia “Cadena a copiar” en la cadena nombre y añade un carácter nulo al final de la cadena resultante. El siguiente programa muestra una aplicación de strcpy ( ).