domingo, 20 de mayo de 2018

Apéndice: Cadena de Caracteres


Al inicio de este curso se expuso los tipos de datos más usados en la Programación en C++ (ver Capítulo: Tipo de Datos, Variables y Constantes), siendo el char el tipo que define a una variable que almacenará caracteres. La limitante de una variable tipo char es que sólo puede almacenar un caracter; si deseábamos guardar una cadena de texto, con una variable tipo char no era posible. Entonces cómo hacerlo, pues es lo que veremos a continuación.

Las cadenas de caracteres se manejan como arreglos y existen dos maneras de declararlas. Si trabajamos con la version de C se declara un arreglo tipo char sin tamaño. Con la versión de C++ se agrega otro tipo de datos propio para el manejo de cadena de caracteres (string). Ambas declaraciones crean un arreglo en la que cada posición del mismo contiene un caracter del texto declarado. Veamos un ejemplo del mismo.

#include <stdlib.h>
#include <iostream>
using namespace std;

int main (){

    char saludo[] = "Hola";
    string bienvenida = "Estas en tratado tecnologico";
    cout << saludo << ". " << bienvenida << endl;
    cout << saludo[0] << bienvenida[9];

    return 0;
}

Si nos fijamos en el ejercicio anterior podemos notar lo siguiente:
  • Se muestran dos maneras de declarar una arreglo: 
    • En la primera se declara un arreglo (saludo[]) tipo char sin indicar el tamaño del mismo. El tamaño del arreglo lo asigna el compilador una vez contabilice la cantidad de caracteres que tenga la cadena más un espacio el cual se asigna como indicador del fin de texto.
    • La segunda forma se crea una variable (bienvenida) tipo string, el cual será tratado como un arreglo si se desea explorar cada carácter del texto.
    • Aunque es posible crearlo con el tipo string, mi recomendación es crear un arreglo tipo char, ya que las funciones para el tratamiento de cadenas de caracteres indican un error en el tipo de datos cuando la cadena es creada tipo string.
  • A pesar de ser declarado como un arreglo, para mostrar sus valores no hace falta explorarlo con un for, solo es necesario colocar el nombre del arreglo.
  • También se puede observar que si deseamos mostrar un carácter en específico podemos hacer mención al mismo colocando el índice en el arreglo. Por ejemplo: saludo[0] muestra la H y bienvenida[9] imprime T.
Una de las preocupaciones de toda persona que se inicia en la programación y estudia los tipos de datos es cómo tratar las cadenas de caracteres, ya que al inicio sólo se le indica el tipo char el cual permite manipular un sólo carácter. Pues bien acabamos de dar la respuesta. Esto no se atiende al inicio debido que es necesario conocer la estructura de los arreglos para poder comprenderlo con mayor facilidad.

Ahora, hagamos un programa que permita contabilizar la cantidad de caracteres que tiene una cadena de texto. Para esto le mostraré dos formas de hacerlo.
Versión 1:   
#include <stdlib.h>
#include <iostream>
using namespace std;

int tam_cadena_char( char cadena[] );
int tam_cadena_string( string cadena );

int main (){

    int cant_sal, cant_bien;

    char saludo[] = "Hola";
    string bienvenida = "Estas en Tratado Tecnologico";
    cout << saludo << ". " << bienvenida << endl;
    cout << saludo[0] << bienvenida[9];
    cout << tam_cadena_char(saludo) << endl;
    cout << tam_cadena_string(bienvenida);
    return 0;
}
int tam_cadena_char( char cadena[] ){

    int i = 0;
    while (cadena[i] != 0){
        i++;
    }
    return i;
}
int tam_cadena_string( string cadena ){

    int i = 0;
    while (cadena[i] != 0){
        i++;
    }
    return i;
}


Versión 2: 
#include <stdlib.h>
#include <string.h<
#include <iostream>
using namespace std;

int main (){

    char saludo[] = "Hola";
    cout << saludo << ". " << endl;
    cout << saludo[0];
    cout << strlen(saludo) << endl;
    return 0;
}  

Se puede notar en ambas versiones que el programa cumple con lo requerido, pero veámoslo con detalles:
  • En la Versión 1:  Se crean dos funciones para contabilizar la cantidad de caracteres una para las cadenas creadas tipo char y otro para los tipo string. A estas funciones se les pasa como argumento los arreglos y dentro se ejecuta un while cuya condición de ruptura es cuando dentro de la cadena se consigue un valor 0. Este valor se coloca al final de cada cadena para indicar su final. Posteriormente esa función retorna la cantidad de caracteres la cual ha sido almacenada en la variable i.
  • En la Versión 2: Se agrega una nueva librearía string.h la cual nos permite acceder a una cantidad de funciones propias para la manipulación de cadena de caracteres. Es así como se utiliza la función strlen pasándole como parámetro el arreglo saludo. Esta función devuelve como valor el tamaño del carácter.
Los invito a probar estos programas y estudiar su funcionamiento. Así como al agregar la librería string.h se facilitó la manipulación de funciones, existen otras librerías que condensan una serie de funciones que apoyan otras tareas en la programación en C++. En el Apéndice: Librerías se ofrecen algunas de ellas.

0 comentarios:

Publicar un comentario