61 - Clase string


El lenguaje C++ puede utilizar el manejo de cadenas de caracteres heredado de C y además implementa una clase estándar string que encapsula la administración de cadenas de caracteres.

El manejo de cadenas de caracteres con la clase string simplifica en gran medida la implementación de algoritmos y reduce la cantidad de errores que podemos cometer.

Para crear un objeto de la clase string podemos hacerlo de dos formas:

string cadena1("Hola mundo");

o la más cómoda y legible:

string cadena1="Hola mundo";

Para poder utilizar la clase string debemos incluir en nuestro programa:

#include<string>

Y debemos hacer uso del espacio de nombres std:

using namespace std;

Creación, inicialización por asignación y carga por teclado de un objeto de tipo string.

Confeccionar un programa que defina dos objetos de la clase string, uno iniciar con la cadena “hola mundo” y el segundo cargarlo por teclado. Mostrarlos por la consola.

Programa:

#include<string>
#include<iostream>

using namespace std;

int main()
{
    string cadena1 = "Hola mundo";
    string cadena2;
    cout << "Ingrese una cadena de caracteres sin espacios en blanco:";
    cin >> cadena2;
    cin.get();
    cout << "Primer string:" << cadena1 << "\n";
    cout << "Segundo string:" << cadena2;
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace : Clasestring1.zip

Definimos dos string y a uno ya lo cargamos por asignación:

    string cadena1="Hola mundo";
    string cadena2;

El segundo string lo cargamos por teclado empleando el objeto cin:

    cin >>cadena2;

Como el cin deja en el buffer de teclado un enter procedemos a extraerlo mediante la llamada al get:

    cin.get();

Finalmente mostramos los contenidos de los string empleando el objeto cout:

    cout>>"Primer string:">>cadena1>>"\n";
    cout>>"Segundo string:">>cadena2;

Es importante hacer notar que cuando ingresamos una cadena con el objeto cin no podemos ingresar el espacio en blanco, sino se corta el string en dicho caracter.

Par permitir ingresar espacios en blanco dentro del string por teclado debemos utilizar la función getline:

    getline(cin,cadena2);

Esta función ya libera el buffer del último “enter” ingresado. El programa visto anteriormente queda finalmente codificado como:

Programa:

#include<string>
#include<iostream>

using namespace std;

int main()
{
    string cadena1 = "Hola mundo";
    string cadena2;
    cout << "Ingrese una cadena de caracteres:";
    getline(cin, cadena2);
    cout << "Primer string:" << cadena1 << "\n";
    cout << "Segundo string:" << cadena2;
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace : Clasestring2.zip

Operadores relacionales aplicados a la clase string.

Así como vimos que a un objeto de la clase string podemos iniciarlo por el operador = (asignación) también podemos utilizar los operadores relacionales para comparar el contenido de dos string:

==
!=
>
>=
<
<=

La clase string facilita la comparación de cadenas de caracteres a diferencia del manejo con vectores de caracteres donde debemos utilizar las función strcmp.

Problema

Realizar la carga de dos string por teclado luego mostrar el mayor alfabéticamente.

Programa:

#include<string>
#include<iostream>

using namespace std;

int main()
{
    string s1;
    string s2;
    cout << "Primer cadena:";
    getline(cin, s1);
    cout << "Segundo cadena:";
    getline(cin, s2);
    if (s1>s2)
    {
        cout << s1 << " es el mayor alfabeticamente.";
    }
    else
    {
        if (s2>s1)
        {
            cout << s2 << " es el mayor alfabeticamente";
        }
        else
        {
            cout << "Se cargaron dos cadenas iguales";
        }
    }
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace : Clasestring3.zip

Hay que tener bien en cuenta que cuando utilizamos el operador > estamos haciendo una comparación no por la cantidad de caracteres sino alfabéticamente (por ejemplo el string "bien" es mayor al string "alma" ya que la "b" es mayor a la "a".

Operador +.

La clase string redefine el operador + con el objeto de generar otro objeto de la clase string que resulte de concatenar los contenidos de los string respectivos.

Problema

Realizar la carga de dos string por teclado luego crear un tercer string concatenando los dos con el caracter "-" entre medio.

Programa:

#include<string>
#include<iostream>

using namespace std;

int main()
{
    string s1;
    string s2;
    cout << "Primer cadena:";
    getline(cin, s1);
    cout << "Segundo cadena:";
    getline(cin, s2);
    string s3 = s1 + "-" + s2;
    cout << "string que resulta de la concatenacion de los dos anteriores:" << s3;
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace : Clasestring4.zip

El tercer string se crea a partir del contenido de otros tres string:

    string s3=s1+"-"+s2;

Acceder a un caracter individual del string por medio de un subíndice.

Podemos acceder a cualquier caracter del string indicando la posición del elemento que queremos acceder. Las posiciones comienzan a numerarse a partir de cero.

Problema

Inicializar un string con la cadena “hola” luego extraer el primer y último caracter del string por medio de subíndices.

Programa:

#include<string>
#include<iostream>

using namespace std;

int main()
{
    string cadena1 = "Hola";
    cout << cadena1[0];
    cout << "\n";
    cout << cadena1[3];
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace : Clasestring5.zip

Hay que tener cuidado de acceder siempre a posiciones dentro del string que tengan caracteres, por ejemplo se generará un error en tiempo de ejecución si queremos acceder al caracter de la posición 12:

    string cadena1="Hola";
    cout <<cadena1[12];

Retornar