4.1 Cadenas de caracteres: strings



Vimos que para guardar caracteres de texto (letras)  usábamos datos de tipo char. Cuando se requieren guardar palabras o frases, se vuelve imposible hacerlo de esta manera. (Imaginemos sólo la complicación para guardar un listado de nombres: Habría que generar una variable para cada letra, pero a su vez cada nombre podría contener una cantidad distinta de letras, etc.)
Para guardar frases de texto, en C++ se pueden utilizar los datos de tipo string., también llamados cadenas o cadenas de caracteres.

#include <iostream>

using namespace std;



int main()

{

    string uno;

    uno = "¡Hola Mundo!";

    cout << uno << endl;


En este ejemplo, definimos una variable(*) de tipo string (la variable uno), le asignamos un valor ("¡Hola Mundo!"), y la mostramos por pantalla con la instrucción cout.
Análogamente, se puede ingresar un valor desde teclado con la instrucción cin:

cin >> uno;

Pero la instrucción cin considera el espacio en blanco como un separador de variables, por lo que la variable ingresada sólo podrá tener una palabra: Lo que se ingrese luego del espacio en blanco, será considerado otra variable diferente.
Como ejemplo, veamos el siguiente programa:

#include <iostream>

using namespace std;



int main()

{

    string nombre;

    cout << "Ingrese su nombre:"<< endl;

    cin >> nombre;

    cout << "¡Hola "<< nombre <<"!" << endl;

}


Si se ingresa como nombre “María”, se obtiene la respuesta esperada “¡Hola María!”. En cambio, si se ingresa como nombre “Juan Pablo”, la respuesta obtenida será “¡Hola Juan!”
Para evitar este problema, se utiliza la instrucción getline:

#include <iostream>

using namespace std;


int main()

{

    string nombre;

    cout << "Ingrese su nombre:"<< endl;

    getline (cin, nombre);

    cout << "¡Hola "<< nombre <<"!" << endl;

}


Esta instrucción sólo acepta el fin de línea (”Enter”) como separador de variables, así que toda la línea que se ingrese será interpretada como una sola variable de tipo string.



También es posible realizar comparaciones con datos de tipo string:

#include <iostream>

using namespace std;


int main()

{

    string clave, codigo;

    codigo = "qwertyuiop";

    do

    {

        cout << "Ingrese su contraseña:";

        cin >> clave;

    }

    while (clave != codigo);

    cout << "Bienvenido!";

}

Este programa seguirá repitiendo el ciclo do…while hasta que la clave ingresada por el usuario sea igual al código escrito por el programador.
Todos los operadores lógicos son válidos con variables de tipo string. También es posible usar la comparación para ver si un string es menor o mayor a otro. Un string se considera menor a otro si alfabéticamente es anterior. (O sea, si está antes en el diccionario.)
En el siguiente programa:

#include <iostream>
using namespace std;

int main()
{
    string secreto = "elefante";
    string intento;
    int i=0;
    do
    {
    cout<<"Realice un intento:";
    cin>>intento;
    i++;
    if (secreto<intento)
        cout <<"La palabra secreta es anterior."<<endl;
    else
        if (secreto>intento)
            cout<<"La palabra secreta es posterior."<<endl;
    }
    while(secreto!=intento);
    cout <<"Felicitaciones. Acertaste en "<<i<<" intentos.";

}

El usuario debe ingresar palabras intentando adivinar la palabra secreta "elefante". El programa responderá a cada intento si la palabra secreta es menor (anterior) o mayor (posterior) e irá contando la cantidad de intentos realizados.



(*) Estrictamente hablando, los strings no son variables ni datos, sino que son objetos. Un objeto es una variable que tiene además de datos, tiene métodos (funciones) que le son propios y trabajan sobre esos datos. Hay todo un paradigma de programación que trabaja con ellos, la Programación Orientada a Objetos (POO) y su explicación y desarrollo ocuparía un curso mucho más extenso que éste. Por ello, la simplificación de considerarlos simplemente como variables.

No hay comentarios:

Publicar un comentario