AnteriorPosterior

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

AnteriorPosterior