Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


4.3.4  Matrices alfanuméricas

§1  Sinopsis

Un tipo muy común de matrices son las cadenas alfanuméricas, también llamadas cadenas literales ("Strings literals"). Son matrices de caracteres constantes y clase de almacenamiento static ( 4.1.8c) en las que el último elemento es un nulo, ASCII 0, "\0" ( 3.2.3e). Este carácter es indicativo del fin de la cadena.

De lo apuntado se desprende que las tales cadenas alfanuméricas combinan las características de las matrices y de las constantes, por lo que suelen disponer de un apartado especial en la literatura especializada, justo en el capítulo de las constantes, bajo el epígrafe: constantes de cadena ( 3.2.3f), capítulo al que le remitimos para más amplia información sobre el particular.

§2  Definición

Su definición suele ser un tanto especial, y suele hacerse en el mismo punto que la declaración. Es una expresión del tipo:

char* string = "Hola mundo";     // §3.a

Su acceso se realiza igualmente mediante punteros. Ejemplo:

cout << "Saludo: " << string << endl;


Una expresión como §3.a , significa que el compilador crea la cadena como una matriz de caracteres contiguos (incluyendo su carácter de terminación); la almacena en algún sitio (adecuado para las variables estáticas), crea un puntero a carácter (en este caso es la variable string), y lo hace igual a la dirección del primer elemento de la matriz (el carácter 'H' en este caso).


También pueden ser declaradas utilizando el especificador de matriz (de hecho son matrices). Por ejemplo:

#include <iostream>
using namespace std;

void main() {          // ================
  static char szAppName[] = "Nombre-programa";  // M1
  int dim = sizeof(szAppName)/sizeof(szAppName[0]);
  cout << szAppName << endl;
  cout << "Es una matriz de " << dim << " elementos" << endl;
}

Salida:

Nombre-programa
Es una matriz de 16 elementos

Nota: observe que desde el punto de vista de la gramática C++, la inicalización de la matriz szAppName en M1 es una auténtica rareza. Un caso excepcional que no sigue las pautas generales de inicialización de matrices que se ha mantenido en C++ por compatibilidad con C.

§3  Recapitulación

Según se desprende de lo anterior, en C++ coexisten dos arquitecturas distintas para las cadenas alfanuméricas ("Strings"). La primera, heredada de C y mantenida por compatibilidad, a cuyos miembros hemos denominado constantes de cadena ( 3.2.3f), utiliza un carácter nulo de terminación. La segunda es la descrita en este capítulo, cuyos miembros hemos considerado matrices alfanuméricas que no utilizan elemento de terminación (es responsabilidad del programador saber donde terminan).

Esta dualidad puede confundir al principiante, y aunque la utilización de ambos tipos puede solaparse (generalmente es indiferente usar unas u otras), las técnicas para su manejo son diferentes; tanto para acceder a su contenido como para determinar su longitud o para establecer cuando la cadena está vacía. En consecuencia hay que ser cuidadoso y tener claros los conceptos, puesto que lo más probable es que en un mismo programa coexistan ambos tipos de "strings".

Las funciones de la librería clásica C++ ( 5) destinadas al manejo de "strings" presuponen que se utilizarán constantes de cadena, y generalmente las utilizan a través de un puntero a su primer elemento (la propia rutina se encarga de encontrar el final de la cadena). Por su parte, las rutinas de la STL utilizan objetos-cadena (generalmente instancias de la clase string) cuya representación interna es una matriz alfanumérica.