Un array de caracteres puede ser bastante útil, aunque está bastante limitado. Simplemente es un grupo de caracteres en memoria, pero si quiere hacer algo con él, debe manejar todos los pequeños detalles. Por ejemplo, el tamaño de un array de caracteres entre comillas 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 (incluyendo manejo dinámico de memoria, copia de arrays de caracteres, y concatenación) antes de conseguir lo que desea. Ésta es exactamente la clase de cosas que sería deseable que hiciera un objeto.
La clase string (cadena) del C++ Estándar ha sido diseñada para que se encargue de (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í y las usaré en buena parte de los primeros capítulos del 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 equivalentes 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 por 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 también 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 de que los iostream ya saben cómo 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.