13. Los "strings" (cadenas de texto) en C++. Los "namespaces"
Curso: Introducción a C++, por Nacho Cabanes (antiguo)
13. Los "strings" (cadenas de texto) en C++. Los "namespaces"
Una de las características recientes que se ha añadido al estándar de C++ es la existencia de "strings" (cadenas de texto) como parte del lenguaje, con un manejo tan sencillo como lo es en otros lenguajes como Pascal o Basic.
En general, los compiladores del año 2000 o posteriores deberían permitir el manejo de cadenas, y la mayoría de los anteriores no lo harán. Eso sí, es posible que algún otro incluya alguna clase "string" no totalmente estándar, como las "AnsiString" de Borland C++ Builder.
Veamos su manejo primero con un ejemplo sencillo que nos introduzca los conceptos básicos:
1: //
2: // string1.cpp
3: //
4: // Introducción a C++
5: // Cadenas en el nuevo estandar de C++
6: // Probado con:
7: // Borland C++ 5.5 FCLT
8: //
9: // Curso de C
10: // Jose Ignacio Cabanes
11: //
12: /////////////////////////////////////////////
13:
14: #include <string>
15: #include <iostream>
16: using namespace std;
17:
18: main()
19: {
20: string mensaje;
21: mensaje = "Hola";
22: cout << mensaje;
23: }
La primera diferencia es la existencia de "named spaces" (espacios con nombre) dentro del nuevo estándar de C++. Se trata de una nueva forma de organizar los fichero de cabecera (ficheros ".h"), con la intención de que no sea un auténtico caos cuando tenemos muchos. Así, los ficheros de cabecera estándar están en el espacio llamado "std".
Se sigue pudiendo utilizar los fichero de cabecera de la forma clásica: podríamos escribir
#include <iostream.h>
aunque la forma recomendada (y que quiere decir lo mismo) es
#include <iostream>
using namespace std;
El manejo básico de las cadenas no reviste mayor dificultad:
- Se declaran como cualquier otra variable en C y C++,: string cadena;
- Se les asigna valor con el signo = , como se hace con los números enteros o reales (o como las cadenas en otros lenguajes).
- Su valor se muestra en pantalla con "cout", igual que para las demás variables.
Así que veamos otro ejemplo un poco más complejo:
1: //
2: // string2.cpp
3: //
4: // Introducción a C++
5: // Cadenas en el nuevo estandar de C++
6: // Probado con:
7: // Borland C++ 5.5 FCLT
8: //
9: // Curso de C
10: // Jose Ignacio Cabanes
11: //
12: /////////////////////////////////////////////
13:
14: #include <string>
15: #include <iostream>
16: using namespace std;
17:
18: main()
19: {
20: string texto1, texto2 = "Hola ", texto3("Que tal");
21:
22: texto1 = texto2 + texto3 + " estas? ";
23: cout << texto1 << "\n";
24: string subcadena (texto1, 2, 6); // 6 letras de texto1, desde la tercera
25: cout << subcadena << "\n";
26: string subcadena2;
27: subcadena2 = texto1.substr(0, 5); // 5 letras de texto1, desde el comienzo
28: texto1.insert(5, "Juan "); // Inserto un texto en la posicion 6
29: cout << texto1 << "\n";
30: texto2.replace(1, 2, "ad"); // Cambio 2 letras en la posicion 2
31: cout << texto2 << "\n";
32: cout << "La longitud de texto1 es " << texto1.size() << "\n";
33: cout << "La tercera letra de texto1 es " << texto1[2]
34: << " o bien " << texto1.at(2) << "\n";
35: if (texto2 == "Hada ")
36: cout << "Texto 2 es Hada\n";
37: }
Casi todo se explica por sí solo. Aun así, vamos a dar un repaso rápido:
- Se puede crear una cadena sin valor inicial haciendo string texto1;
- Se le puede dar una valor inicial a la vez que se declara, haciendo string texto2 = "Hola "; o bien string texto3("Que tal");
- Se puede crear una cadena formada por varias, concateándolas (sumándolas), usando el signo +, así: texto1 = texto2 + texto3 + " estas? ";
- Se puede crear una subcadena a partir de un trozo de otra, la vez que se declara, así: string subcadena (texto1, 2, 6);
- O bien se puede extraer un fragmento posteriormente: texto1.substr(0, 5);
- Se puede insertar texto en el interior de una cadena: texto1.insert(5, "Juan ");
- O reemplazar ciertas letras por otras: texto2.replace(1, 2, "ad");
- Se puede saber el tamaño (cantidad de letras) de la cadena: texto1.size()
- Se puede acceder a una posición siguiendo el estándar de C: texto1[2]
- O bien usando la función "at": texto1.at(2)
- Se puede comprobar el valor de una cadena (el texto almacenado) con ==, así: if (texto2 == "Hada ") ...
El resultado de este ejemplo es:
Hola Que tal estas?
la Que
Hola Juan Que tal estas?
Hada
La longitud de texto1 es 25
La tercera letra de texto1 es l o bien l
Texto 2 es Hada
Esto es lo básico de las cadenas de texto en C++. Hay más (por ejemplo, un método "find" para ver si pertenece una cierta subcadena), pero eso queda propuesto como "ejercicio de investigación" para quien quiera profundizar más.
Actualizado el: 29-11-2009 00:13