2.5. Introdución a las cadenas

Un array de caracteres puede ser bastante útil, aunque está bastante limitado. Simplemente son un grupo de caracteres en memoria, pero si quiere hacer algo útil, debe manejar todos los pequeños detalles. Por ejemplo, el tamaño de un array de caracteres es fijo en tiempo de compilación. Si tiene un array de caracteres y quiere añadirle más caracteres, tendrá que saber mucho sobre ellos (incluso manejo dinámico de memoria, copia de array de caracteres, y concatenación) antes de conseguir lo que desea. Esta es exactamente la clase de cosas que desearíamos que hiciera un objeto por nosotros.

La clase string (cadena) del C++ Estándar ha sido diseñada para que se encargue y oculte las manipulaciones de bajo nivel de los arrays de caracteres que antes tenía que realizar el programador de C. Estas manipulaciones han sido una fuente de constantes pérdidas de tiempo y errores desde los orígenes del lenguaje C. Aunque hay un capítulo entero dedicado a la clase string en el Volumen 2 de este libro, las cadenas son tan importantes y facilitan tanto la vida que las presentaré aquí para usarlas lo antes posible en el libro.

Para usar las cadenas debe incluir el fichero de cabecera <string>. La clase string se encuentra en el espacio de nombres std por lo que se necesita usar la directiva using. Gracias a la sobrecarga de operadores, la sintaxis del uso de las cadenas es muy intuitiva:

//: C02:HelloStrings.cpp
// The basics of the Standard C++ string class
#include <string>
#include <iostream>
using namespace std;

int main() {
  string s1, s2; // Empty strings
  string s3 = "Hello, World."; // Initialized
  string s4("I am"); // Also initialized
  s2 = "Today"; // Assigning to a string
  s1 = s3 + " " + s4; // Combining strings
  s1 += " 8 "; // Appending to a string
  cout << s1 + s2 + "!" << endl;
} ///:~

Listado 2.7. C02/HelloStrings.cpp


Las dos primeras cadenas, s1 y s2 empiezan estando vacías, mientras que s3 y s4 muestran dos formas de inicializar los objetos string con arrays de caracteres (puede inicializar objetos string igual de fácil con otros objetos string).

Se puede asignar a un objeto string usando =. Eso sustituye el contenido previo de la cadena con lo que se encuentra en el lado derecho de la asignación, y no hay que preocuparse de lo que ocurre con el contenido anterior porque se controla automáticamente. Para combinar las cadenas simplemente debe usar el operador de suma «+», que tambien le permite concatenar cadenas (strings) con arrays de caracteres. Si quiere añadir una cadena o un array de caracteres a otra cadena, puede usar el operador +=. Finalmente, dése cuenta que iostream sabe como tratar las cadenas, por lo que usted puede enviar una cadena (o una expresión que produzca un string, que es lo que sucede con s1 + s2 + "!">) directamente a cout para imprimirla.