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.