Anuncios

Bienvenidos sean a este post, hoy veremos una herramienta que usamos en otros posts.

Anuncios
Anuncios

Siempre se comenta que C++ es una evolucion de C, dando como resultado no solo que el codigo de C sea compatible con C++ sino que mucho de lo bien implementado en C siga en C++. Por ejemplo, para manejar strings o cadenas de texto de manera basica se hace con char. Para ello se hace con un puntero de un array de char. La unica condicion es que ese array tenga como ultima posicion, un caracter nulo o \0 para finalizar la cadena. Vamos a analizar el siguiente ejemplo:

#include <iostream>

int main()
{
        char palabra[10] = "tinchicus";
        std::cout << palabra << std::endl;
        return 0;
}
Anuncios

Este es un ejemplo simple donde definimos un array de 10 elementos y le pasamos un texto. Para finalmente mostrar el dato recibido. Compilemos y veamos la salida:

$ ./string
tinchicus
$
Anuncios

Funciono perfectamente almacenando la cadena y mostrandola, del codigo anterior busquemos la siguiente linea:

char palabra[10] = "tinchicus";
Anuncios

Y hagamos el siguiente cambio:

char palabra[9] = "tinchicus";
Anuncios

Si lo compilan con esta nueva linea, nos devolvera lo siguiente:

$ g++ string.cpp -o string
string.cpp: In function ‘int main()’:
string.cpp:5:27: error: initializer-string for ‘char [9]’ is too long [-fpermissive]
    5 |         char palabra[9] = "tinchicus";
      |                           ^~~~~~~~~~~
$
Anuncios

Por que nos devuelve un error al compilarlo si es la misma cantidad de caracteres que de elementos en el array? Por lo comentado al inicio, siempre lleva al final el caracter \0 para finalizar la cadena.

Anuncios

Pero una de las grandes virtudes de C y C++, es su gran adaptibilidad y capacidad de expansion. Y en ambos casos disponemos de un archivo de cabecera para manejar las string. Para el caso de C++, ya la hemos estado usando en algunos posts anteriores. Esta basicamente trabaja como el codigo anterior pero este en lugar de usar un array, utiliza un vector para manejar los caracteres recibidos, permitiendo que se pueda ajustar el tamaño de manera dinamica, por lo tanto sin necesidad de preocuparnos por el caracter nulo. Tomemos el codigo anterior y convertimoslo para string:

#include <iostream>
#include <string>

int main()
{
        std::string palabra = "tinchicus";
        std::cout << palabra << std::endl;
        palabra = "tinchicus.com";
        std::cout << palabra << std::endl;

        return 0;
}
Anuncios

Primero importamos la libreria para poder utilizarlo. Lo siguiente es definir una variable con el mismo nombre que el codigo anterior y el mismo texto, para luego mostrarlo. Lo siguiente es cambiar el valor de la variable anterior y lo mostramos nuevamente. Compilemos y ejecutemos para ver como es su salida:

$ ./string
tinchicus
tinchicus.com
$
Anuncios
Anuncios

Como pueden ver funciono perfectamente, tambien podemos observar como se cambio el tamaño para permitir los nuevos caracteres. A diferencia de char, donde el tamaño es fijo y no se puede modificar una vez establecido. Podemos generar un array mas grande del tamaño necesario pero eso conlleva en un desperdicio de memoria. Pero no quita que se sigan usando el metodo comentado al inicio, principalmente por un tema de compatibilidad con versiones mas antiguas.

Anuncios

En resumen, hoy hemos visto a string, como se manipula originalmente, y algunos conceptos a tener en cuenta, luego como se utiliza mediante su libreria, y un ejemplo para ver como trabaja mejor. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donatión

It’s for site maintenance, thanks!

$1.50