Registros, Cadenas en C++

13
UNIVERSIDAD MARIANO GALVEZ DE GUATEMALA INGENIERÍA EN SISTEMAS DE INFORMACIÓN CURSO: ALGORITMOS DOCENTE: RUDY ALBERTO BRAVO SEMENSTRE: SEGUNDO SECCION: “B” Cadenas Registros NOMBRE: DAVID ESTUARDO BAUTISTA LÓPEZ NO. CARNET: 0903-14-18507

description

Investigación sobre registros y cadenas en C++

Transcript of Registros, Cadenas en C++

Page 1: Registros, Cadenas en C++

UNIVERSIDAD MARIANO GALVEZ DE GUATEMALA

INGENIERÍA EN SISTEMAS DE INFORMACIÓN

CURSO: ALGORITMOS

DOCENTE: RUDY ALBERTO BRAVO

SEMENSTRE: SEGUNDO

SECCION: “B”

Cadenas Registros

NOMBRE: DAVID ESTUARDO BAUTISTA LÓPEZ

NO. CARNET: 0903-14-18507

“Y conoceréis la verdad y la verdad os hará libre”

Page 2: Registros, Cadenas en C++

INTRODUCCIÓN

Uno de los problemas más comunes en los diversos sistemas de información es el tratamiento o procesamiento de un gran volumen de datos o de información.

Las variables de tipo arreglo si permiten almacenar y procesar conjuntos de datos del mismo tipo a la vez.

Cada dato dentro del arreglo se le conoce como elemento del arreglo y se simboliza y procesa (captura, operación, despliegue ) usando el nombre del arreglo respectivo y un subíndice indicando la posición relativa del elemento con respecto a los demás elementos del arreglo, solo recordar que en .cpp la primera posición, elemento o renglón es el 0.

Page 3: Registros, Cadenas en C++

CADENAS

Una cadena en C++ es un conjunto de caracteres, o valores de tipo char, terminados con el carácter nulo, es decir el valor numérico 0. Internamente, en el ordenador, se almacenan en posiciones consecutivas de memoria. Este tipo de estructuras recibe un tratamiento muy especial, ya que es de gran utilidad y su uso es continuo.

DECLARACIÓN DE CADENAS:

La manera de definir una cadena es la siguiente:

char <identificador> [<longitud máxima>];

Cuando se declara una cadena hay que tener en cuenta que tendremos que reservar una posición para almacenar el carácter nulo terminador, de modo que si queremos almacenar la cadena "HOLA", tendremos que declarar la cadena como:

char Saludo[5];

Las cuatro primeras posiciones se usan para almacenar los caracteres "HOLA" y la posición extra, para el carácter nulo.

También nos será posible hacer referencia a cada uno de los caracteres individuales que componen la cadena, simplemente indicando la posición. Por ejemplo el tercer carácter de nuestra cadena de ejemplo será la 'L', podemos hacer referencia a él como Saludo[2].

Es muy importante tener presente que en C++, los índices tomarán valores empezando siempre en cero, así el primer carácter de nuestra cadena sería Saludo[0], que es la letra 'H'.

En un programa C++, una cadena puede almacenar informaciones en forma de texto, como nombres de personas, mensajes de error, números de teléfono, etc.

ASIGNACIÓN:

La asignación directa sólo está permitida cuando se hace junto con la declaración.

El siguiente ejemplo producirá un error en el compilador, ya que una cadena definida de este modo se considera una constante, como veremos en el capítulo de "arrays" o arreglos.

char Saludo[5];

Saludo = "HOLA"

Page 4: Registros, Cadenas en C++

La manera correcta de asignar una cadena es:char Saludo[5]; Saludo[0] = 'H'; Saludo[1] = 'O'; Saludo[2] = 'L'; Saludo[3] = 'A'; Saludo[4] = 0;

O bien:

char Saludo[5] = "HOLA";

COMPARACIÓN:

La función strcmp:

//prototipo de strcmp

int strcmp (const char *cadena1, const char *cadena2);

Sirve para comparar la cadena cadena1 con la cadena2.

Devuelve el valor devuelve 0 si son iguales. Devuelve menor que cero si cadena1 es menor que cadena2. Devuelve mayor que cero si cadena1 es mayor que cadena2.

La función strncmp:

char *strncmp (char *cadena1, const char *cadena2, size_t n)

Sirve para comparar n caracteres entre cadena2 y cadena1.

Devuelve el valor devuelve 0 si son iguales. Devuelve menor que cero si cadena1 es menor que cadena2. Devuelve mayor que cero si cadena1 es mayor que cadena2.

CONCATENACIÓN:

Sintaxis: char *strcat(char *dest, const char *src);

strcat agrega la cadena src a dest, la función termina hasta haber encontrado en src el caracter de terminación null.

Código:

char nombre[] = "Oscar E.";

char copia[80] = " Palacios";

strcat(copia, nombre);

cout << copia << endl;

RUTINAS DE MANIPULACIÓN:

Page 5: Registros, Cadenas en C++

Función strlen()

Calcula la longitud de una cadena.

Sintaxis: size_t strlen(const char *s);

strlen calcula la longitud de la cadena s.

Valor de retorno: strlen devuelve el número de caracteres que hay en s, excluyendo el carácter nulo de terminación de cadena.

Función strcpy()

Copia una cadena en otra.

Sintaxis: char *strcpy(char *dest, const char *orig);

Copia la cadena orig a dest, la copia de caracteres se detendrá cuando sea copiado el carácter nulo.

Valor de retorno: strcpy devuelve el puntero dest.

Función strcmp()

Compara dos cadenas.

Sintaxis: int strcmp(char *cad1, const char *cad2);

Compara las dos cadenas, si la cad1 es mayor que cad2 el resultado será mayor de 0, si cad1 es menor que cad2, el resultado será menor de 0, si son iguales, el resultado será 0.

La comparación se realiza carácter a carácter. Mientras los caracteres comparados sean iguales, se continúa con el siguiente carácter. Cuando se encuentran caracteres distintos, aquél que tenga un código ASCII menor pertenecerá a la cadena menor. Por supuesto, si las cadenas son iguales hasta que una de ellas se acaba, la más corta es la menor.

Función strcat()

Añade o concatena una cadena a otra.

Sintaxis: char *strcat(char *dest, const char *orig);

strcat añade una copia de orig al final de dest. La longitud de la cadena resultante será strlen(dest) + strlen(orig).

Valor de retorno: strcat devuelve un puntero a la cadena concatenada.

Función strncpy()

Page 6: Registros, Cadenas en C++

Copia un determinado número de caracteres de una cadena en otra.

Sintaxis: char *strncpy(char *dest, const char *orig, size_t maxlong);

Copia maxlong caracteres de la cadena orig a dest, si hay más caracteres se ignoran, si hay menos se rellenará con caracteres nulos. La cadena dest no se terminará con nulo si la longitud de orig es maxlong o más.

Valor de retorno: strncpy devuelve el puntero dest.

Función strncmp()

Compara dos porciones de cadenas.

Sintaxis: int strncmp(char *cad1, const char *cad2, size_t maxlong);

Compara las dos cadenas igual que strcmp, pero sólo se comparan los primeros maxlong caracteres.

Función strncat()

Añade o concatena una porción de una cadena a otra.

Sintaxis: char *strncat(char *dest, const char *orig, size_t maxlong);

strncat añade como máximo maxlong caracteres de la cadena orig al final de dest, y después añade el carácter nulo. La longitud de la cadena resultante será strlen(dest) + maxlong.

Valor de retorno: strncat devuelve un puntero a la cadena concatenada.

Función strtok()

Busca dentro de una cadena conjuntos de caracteres o símbolos (tokens) separados por delimitadores.

Sintaxis: char *strtok(char *s1, const char *s2);

strtok considera la cadena s1 como una lista de símbolos separados por delimitadores de la forma de s2.

La primera llamada a strtok devuelve un puntero al primer carácter del primer símbolo de s1 e inserta un carácter nulo a continuación del símbolo retornado. Las siguientes llamadas, especificando null como primer argumento, siguen dando símbolos hasta que no quede ninguno.

El separador, s2, puede ser diferente para cada llamada.

Valor de retorno: strtok devuelve un puntero al símbolo extraído, o NULL cuando no quedan símbolos.

CONVERSIONES:

Page 7: Registros, Cadenas en C++

stringstreams

La biblioteca de la corriente C ++ es potente y permite operaciones de salida de entrada fácil con formato. Con stringstreams puede realizar esta entrada / salida de cadena, esto le permite convertir números (o cualquier tipo con los << >> operadores de flujo sobrecargados) hacia y desde las cuerdas.

Con stringstreams puede utilizar la misma sintaxis para convertir los diferentes tipos.

Para utilizar stringstreams usted necesita # include <sstream>

std :: to_string

Convierte tipos numéricos básicos para cuerdas.

El conjunto de funciones Stoi, stol, stoll convertir a tipos integrales, las funciones stof, stod, stold a valores de punto flotante.

Estas funciones se declaran en declarada en <string>.

Boost

Usando stringstreams es la manera estándar C ++ de hacer estas conversiones pero por lo general necesitan unas pocas líneas de código entre el Boost bibliotecas hay lexical_cast que permite realizar las conversiones stringstream por simple llamada a la función

Para hacer esta biblioteca de trabajo, basta con incluir la cabecera, que no necesita estar vinculado.

stdio

Número de cuerdas

En C no hay biblioteca corriente, pero la función sprintf se puede utilizar para la conversión

Funciona de manera similar a printf pero va a poner los caracteres de una cadena C (una matriz de caracteres) en lugar de stdout Usar esto no es tan fácil como con corrientes como los cambios de formato de cadena en función del tipo de número que debe ser convertida.

stdlib

El stdlib cabecera contiene algunas funciones para convertir texto y números de cuenta que ! algunas de estas funciones no son estándar Estas funciones son:

Itoa, atoi, atoll, atof, strtol, strtoul, strtod

- Para los ejemplos se refieren a las páginas de referencia individuales.

Page 8: Registros, Cadenas en C++

REGISTROS

Es un tipo de dato estructurado formado por la unión de varios elementos bajo una misma estructura. Estos elementos pueden ser, o bien datos elementales (entero, real, carácter,...), o bien otras estructuras de datos. A cada uno de esos elementos se le llama campo.

Un registro se diferencia de un vector en que éste es una colección de datos iguales, es decir, todos del mismo tipo, mientras que en una estructura los elementos que la componen, aunque podrían serlo, no tiene por qué ser del mismo tipo.

DECLARACIÓN DE REGISTROS:

La declaración de una estructura se hace de la siguiente manera:

struct nombre_estructura

{

tipo1 dato1;

tipo2 dato2;

...

tipoN datoN;

};

ACCEDER A LOS CAMPOS DE LA REGISTROS:

Para acceder a los campos de la estructura, lo haremos de la manera siguiente:

variable.campo;

Donde variable es el nombre de la variable de tipo estructura que hemos creado, y campo es el nombre de la variable que forma parte de la estructura. Lo veremos mejor con un ejemplo basado en la estructura definida anteriormente:

amigo.edad=27;

Con esta sentencia lo que estamos haciendo es almacenar el valor 27 en el campo edad de la variable amigo.

Una opción que nos permiten las estructuras es pasar el contenido de una estructura a otra, siempre que sean del mismo tipo naturalmente.

Page 9: Registros, Cadenas en C++

ANIDAMIENTO DE REGISTROS:

Las estructuras también pueden anidarse. Es decir, podemos usar como campo de una estructura, otra estructura. Por ejemplo.

struct pareja

{

struct persona juan;

struct persona laia;

};

Array de estructuras:

Supongamos ahora que queremos guardar la información de varias personas. Con una variable de estructura sólo podemos guardar los datos de uno. Necesitamos declarar arrays de estructuras:

struct estructura_persona amigo[10];

Ahora necesitamos saber cómo acceder a cada elemento del array. La variable definida es amigo, por lo tanto para acceder al primer elemento usaremos amigo[0] y a su miembro nombre: amigo[0].nombre.

REGISTROS VARIANTES:

Están formados también por varios miembros, pero sólo pueden contener el valor de uno de ellos en cada momento. La declaración:

union type_mess

{

int m3;

int m4[MAX_PROCESS];

};

Indica que type_mess puede contener un entero o un vector de enteros, pero no ambos. Los compiladores deben reservar espacio suficiente para que los registros variantes puedan contener la variante que ocupe más espacio en memoria.

Page 10: Registros, Cadenas en C++

CONCLUSIONES Y RECOMENDACIONES

Debemos utilizar la librería <string.h> si haremos uso de cadenas o registros.

Vectores y registros no son lo mismo.

Precisión a la hora de escribir cada una de nuestras palabras reservadas.

No olvidarnos de tomar en cuenta que debemos de tomar un valor adicional a la hora de declarar nuestras cadenas.

BIBLIOGRAFÍA

Cadenas:

http://c.conclase.net/curso/?cap=008

http://www.c.conclase.net/curso/?cap=902f

http://codigomaldito.blogspot.com/2005/11/comparacin-de-cadenas-strcmp-y-strncmp.html

http://www.clubdelphi.com/foros/showthread.php?t=78910

http://www.cplusplus.com/articles/D9j2Nwbp/

Registros

http://es.wikipedia.org/wiki/Registro_(estructura_de_datos)

http://programacion1-teoria.wikispaces.com/G.+Registros.+Estructuras+en+C

http://html.rincondelvago.com/lenguaje-c_4.html