Está en la página 1de 13

Programacin en C++/Arrays y cadenas de texto

< Programacin en C++

Streams

Desarrollo Orientado a Objetos


Contenido
[ocultar]

1Arrays y cadenas de texto

2Indices de un array

3Dimensiones de un array
o

3.1Array unidimensional

3.2Array bidimensional

4Declaracin de arrays en C, C++


o

4.1Iteraciones dentro de un array (vector)

4.2Iteraciones dentro de un array (matriz)

5Cadenas de caracteres
o

5.1La biblioteca string

6Cadenas en C++

7Arrays en C++

Arrays y cadenas de texto[editar]


Los arrays son usados extensamente por los programadores para contener listas de datos en la memoria, por ejemplo,
los datos almacenados en un disco suelen leerse y ponerse dentro de un array con el objetivo de facilitar la
manipulacin de dichos datos, ya que los datos en memoria pueden ser modificados, clasificados, marcados para su
eliminacion, etc. para luego ser reescritos al disco. Otro ejemplo podra ser el de un men de opciones que se
desplegarn dentro de una ventana para que el usuario pueda elegir una de stas, en tales casos y cuando las
opciones son numerosas, solamente se ponen unas cuantas de ellas dentro de la ventana pero se le da al usuario la
oportunidad de poder subir y bajar a su antojo para ver el resto de opciones que, aunque no se vean en la ventana,
forman parte del men o array de opciones.

Array:
Un array es un conjunto de datos del mismo tipo ordenados de forman lneal uno despus de otro. Los componentes de
un array se han de referenciar por medio del nombre del array y un ndice de desplazamiento para indicar el
componente deseado.

Indices de un array[editar]
Los ndices son nmeros que se utilizan para identificar a cada uno de los componentes de un array. A modo de
ejemplo, podemos pensar que los ndices son como los nmeros de habitaciones de un hotel, es decir, para poder
dirigirnos a un hotel especfico es necesario saber el nombre del mismo, luego, si queremos llegar a una habitacin
especfica de dicho hotel necesitaremos, adems del nombre del hotel, el nmero de habitacin deseado.

Dimensiones de un array[editar]
De acuerdo a la forma en que se construye o declara un array, ste puede ser clasificado como: unidimensional,
bidimensional y multidimensional. Los arrays que se emplean con mucha ms frecuencia son los estructurados a
manera de vector ( array unidimensional ) y los estructurados a manera de matriz ( array bidimensional ), as, aunque
en C++ se pueden crear estructuras multidimensionales, en este captulo solo trataremos con vectores y matrices.

Array unidimensional[editar]
Una array uni-dimensional es aquel en donde los componentes son accesibles por medio de uno y solamente un ndice
que apunte al componente requerido. Los arrays de este tipo son conocidos tambin con el nombre de vectores.
Conceptualmente, podemos pensar en un array unidimensional como una lista compuesta de datos, donde para
referirnos a uno de ellos emplearemos un nmero para indicar la posicin del mismo dentro de la lista. Por ejemplo,
consideremos el caso de la tabla o array VentaSemanal, la cual est pensada para registrar las ventas de cada uno de
los das de la semana. De manera conceptual podemos ver el array como se muestra a continuacin:
Nota: en C++ los arrays estn basados en 0 ( cero ), es decir, el primer elemento de un array se indexa mediante el 0, y
el ndice para el ltimo de los elementos es igual al nmero de componentes menos uno.
array: VentaSemanal
+------+
| dato | <-- componente 0, ( fila 0 )
|------|
| dato | <-- componente 1, ( fila 1 )
|------|
| dato | ...
|------|
| dato | ...
|------|
| dato | ...
|------|
| dato | ...
|------|
| dato | <-- componente 6, ( fila 6 )
|------|

Si en el array VentaSemanal queremos que el elemento 4 ( por ejemplo ) contenga el valor de 8987 lo podemos lograr
con la instruccin: VentaSemanal[4] = 8987;y el estado del array sera:

array: VentaSemanal
+------+
| dato |
|------|
| dato |
|------|
| dato |
|------|
| dato |
|------|
| 8987 | <--- componente 4
|------|
| dato |
|------|
| dato |
|------|

Array bidimensional[editar]
Un array bi-dimensional es aquel en donde los componentes son accesibles por medio de una pareja de ndices que
apunten a la fila y a la columna del componente requerido. Los arrays de este tipo son conocidos tambin con el
nombre de matrices. Conceptualmente, podemos pensar en un array bidimensional como en una lista compuesta de
filas y columnas, en donde para referirnos a una de ellas emplearemos un nmero para indicar la posicin de fila y otro
nmero para indicar la posicin de la columna del componente deseado. Por ejemplo, consideremos el caso de la tabla
o array VentaSemanaQ, la cual est pensada para registrar las ventas de cada uno de los das de la semana por cuatro
semanas, o sea, una tabla de 7 x 4 elementos. De manera conceptual podemos ver el array como se muestra a
continuacin:
array: VentaSemanaQ
C O L U M N A S
+--- componente ( 0, 0 )
|
+------+------+------+------+
| dato | dato | dato | dato |
|------|------|------|------|
F

| dato | dato | dato | dato |


|------|------|------|------|

| dato | dato | dato | dato |

|------|------|------|------|
L

| dato | dato | dato | dato |


|------|------|------|------|

| dato | dato | dato | dato |


|------|------|------|------|

| dato | dato | dato | dato |


|------|------|------|------|
| dato | dato | dato | dato |
+------+------+------+------+
|
+---- componente ( 6, 3 )

Si en el array VentaSemanaQ queremos que el elemento de la fila 4, columna 3 ( por ejemplo ) contenga el valor de
5000 lo podemos lograr con la instruccin:VentaSemanaQ[4][3] = 5000; y el estado del array sera:
array: VentaSemanaQ
+--- componente ( 0, 0 )
|
+------+------+------+------+
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | 5000 | <-- componente ( 4, 3 )
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
+------+------+------+------+
|
+---- componente ( 6, 3 )

Declaracin de arrays en C, C++[editar]


En C, C++ para declarar un array se emplea la sintaxis:

tipo identificador [tamao]

= { lista de inicializacin }

donde,

tipo se refiere al tipo de datos que contendr el array. El tipo puede ser cualquiera de los tipos estndar (char,
int, float, etc.) o un tipo definido por el usuario. Es ms, el tipo del array puede ser de una estructura creada con:
struct, union y class.
identificador se refiere al nombre que le daremos al array.

tamao es opcional e indica el nmero de elementos que contendr el array. Si un array se declara sin tamao,
el mismo no podr contener elemento alguno a menos que en la declaracin se emplee una lista de inicializacin.

lista de inicializacin es opcional y se usa para establecer valores para cada uno de los componentes del array.
Si el array es declarado con un tamao especfico, el nmero de valores inicializados no podr ser mayor a dicho
tamao.

Ejemplos:
int intA[5];
long longA[5] = { 1, 2, 3, 4, 5 };
char charA[3] = { 'a', 'b', 'c' };

Iteraciones dentro de un array (vector)[editar]


El termino Iterar se refiere al hecho de acceder (con el fin de leer o escribir) sobre cada uno de los componentes de un
array. As, para poner un ejemplo reconsideremos el caso de la tabla VentaSemanal (vista en una seccin anterior), y
que dicho sea de paso es un array de 7 elementos de tipo double. Luego, vamos a mostrar como ejemplo un programa
completo en el cual se declara el array mencionado con valores inicializados, que sern mostrados en pantalla y al final
la suma de estos. Observe que la variable i usada para iterar dentro del array va desde 0 hasta FILAS - 1 ( FILAS es el
tamao del array ).
Nota: por motivos de simplificacin el programa est escrito al estilo de C estndar. Sin embargo puede ser compilado y
ejecutado en un compilador de C++.
#include <stdio.h>
#include <stdlib.h>
#define FILAS 7
int main()
{
float ventas[FILAS] = {
123.50, 234.60, 345.45, 321.40, 345.00, 456.65, 0.0 };

float total = 0;
int i;
puts("Ventas de la semana");
puts("-------------------");
for (i=0; i<FILAS; i++) {
total += ventas[i];
printf( "%8.2f\n", ventas[i] );
}
puts("--------");
printf("%8.2f\n", total );
system("pause");
return 0;
}
Esta es la salida del programa:
Ventas de la semana
------------------123.50
234.60
345.45
321.40
345.00
456.65
0.00
-------1826.60

Iteraciones dentro de un array (matriz)[editar]


Con el fin de leer o escribir sobre cada uno de los componentes de una matriz se deben crear dos ciclos de iteracin.
As, para poner un ejemplo reconsideremos el caso de la tabla VentaSemanaQ (vista en una seccin anterior), y que
dicho sea de paso es un array de 4 x 4 elementos de tipo double. Luego, vamos a mostrar como ejemplo un programa
completo en el cual se declara el array mencionado con valores inicializados, que sern mostrados en pantalla y al final
la suma de estos. Observe que en este caso se utilizan dos variables, una para iterar sobre las filas y otra para iterar
sobre las columnas de la matriz.
#include <stdio.h>

#include <stdlib.h>
#define FILAS 7
#define COLS 4
int main()
{
float VentaSemanaQ[FILAS][COLS] = {
123.50, 234.60, 345.45, 321.40,
345.00, 456.65, 123.50, 234.60,
345.45, 321.40, 345.00, 456.65,
123.50, 234.60, 345.45, 321.40,
345.00, 456.65, 123.50, 234.60,
345.45, 321.40, 345.00, 456.65,
0.0, 0.0, 0.0, 0.0 };
float totales[COLS] = { 0.0, 0.0, 0.0, 0.0 };
float grantotal = 0;
int f, c, t = 0 ; /* indices para filas, columnas y totales */
puts("Ventas de cuatro semanas");
puts("------------------------");
for (f=0; f<FILAS; f++) {
for (c=0; c<COLS; c++) {
totales[c] += VentaSemanaQ[f][c];
printf("%8.2f

", VentaSemanaQ[f][c] );

}
puts("");
}
puts("--------------------------------------");
for (t=0; t<COLS; t++) {
printf("%8.2f

", totales[t] );

grantotal += totales[t];
}
printf("\n\nGran total: %10.2f\n", grantotal);
system("pause");
return 0;

Salida del programa:


Ventas de cuatro semanas
-----------------------123.50

234.60

345.45

321.40

345.00

456.65

123.50

234.60

345.45

321.40

345.00

456.65

123.50

234.60

345.45

321.40

345.00

456.65

123.50

234.60

345.45

321.40

345.00

456.65

0.00

0.00

0.00

0.00

-------------------------------------1627.90

2025.30

1627.90

2025.30

Gran total: 7306.40

Cadenas de caracteres[editar]
En C, C++ las cadenas de caracteres no son ms que arrays de caracteres, salvo que a este tipo de arrays el
compilador les da un tratamiento especial. Usted puede manipular las cadenas de caracteres de la misma manera en
que manipula cualquier otro tipo de array, sin embargo, es preferible hacer uso de una librera estndar especialmente
escrita para manipulacion de cadenas de caracteres, me refiero a la librera <string.h> y que viene incluida con todo
compilador de C, C++.
Para comenzar y antes de ver algunas de las funciones de la mencionada librera, tenemos los siguientes ejemplos:
1. char

nombre[]

2. char

nombre2[] = { 'O', 's', 'c', 'a', 'r', '\0' };

= "Oscar";

En el ejemplo 1 se est declarando la variable nombre como una cadena de caracteres y cuyo contenido inicial
es "Oscar".

En el ejemplo 2 se est declarando la variable nombre2 como una cadena de caracteres y cuyo contenido
inicial es { 'O', 's', 'c', 'a', 'r', '\0' };.

En ambos casos el resultado es el mismo, es decir, al final se obtiene la misma cadena, pero usted debe poner atencin
al hecho de que toda cadena de caracteres en C, C++ debe terminar con el carcter NULL, que normalmente es igual a
cero y se puede escribir como '\0'. Ahora bien, cuando usted usa la sintaxis mostrada en el ejemplo 1 no tiene que
preocuparse por agregar el caracter NULL, ya que esto lo hace el compilador automticamente.

La biblioteca string[editar]

Los compiladores de C, C++ dan soporte a la biblioteca de funciones <string.h>, a la que accede por medio de la
directiva #include <string.h>. No veremos en detalle todas las funciones contenidas en dicha biblioteca, y nos
limitaremos a mostrar algunos ejemplos de ciertas funciones importantes.

strlen(): Obtener longitud de cadenas


Sintaxis: size_t strlen(const char *s);
Comentarios: La funcin strlen() devuelve la longitud de la cadena s.
Ejemplo:
char *nombre = "Oscar E. Palacios";
cout << strlen(nombre) << endl;

strcpy(): Copiar cadenas


Sintaxis: char *stpcpy(char *dest, const char *src);
Comentarios: stpcpy copia la cadena src hacia dest, la funcin termina hasta haber encontrado en src el
carcter de terminacin null.
Ejemplo:
char *nombre = "Oscar E. Palacios";
char copia[80];
strcpy(copia, nombre);
cout << copia << endl;

strcat(): Concatenar cadenas


Sintaxis: char *strcat(char *dest, const char *src);
Comentarios: strcat agrega la cadena src a dest, la funcin termina hasta haber encontrado en src el carcter
de terminacin null.
Ejemplo:
char nombre[] = "Oscar E.";
char copia[80] = " Palacios";
strcat(copia, nombre);
cout << copia << endl;

strlwr(): Convertir a minsculas.


Sintaxis: char *strlwr(char *dest);
Comentarios: strlwr convierte todos los caracteres alfabticos ( 'A' .. 'Z' ) en dest a sus correspondientes
caracteres alfabticos ( 'a' .. 'z' ).
Ejemplo:

char nombre[] = "Oscar E. Palacios";


strlwr(nombre);
cout << nombre << endl;

strupr(): Convertir a maysculas.


Sintaxis: char *strupr(char *dest);
Comentarios: strupr convierte todos los caracteres alfabticos ( 'a' .. 'z' ) en dest a sus correspondientes
caracteres alfabticos ( 'A' .. 'Z' ).

strchr(): Buscar carcter ( hacia adelante )


Sintaxis: char *strchr(char *s, int c);
Comentarios: strchr busca en s el caracter c. La busqueda se lleva a cabo desde el inicio hasta el final de s.
Regreso: si la operacin es exitosa strchr regresa un puntero hacia la primera ocurrencia de c en s, en caso
contrario strchr regresa null.
Ejemplo:
char nombre[] = "Oscar E. Palacios";
char *p;
p = strchr(nombre, 'E');
if (p) {
cout << "nombre contiene a E" << endl;
cout << "indice = " << (p - nombre) <<
endl;
}
else cout << "E no est en nombre" << endl;

strrchr(): Buscar carcter ( hacia atras )


Sintaxis: char *strrchr(char *s, int c);
Comentarios: strchr busca en s el caracter c. La busqueda se lleva a cabo desde el final hasta el inicio de s.
Regreso: si la operacin es exitosa strchr regresa un puntero hacia la ltima ocurrencia de c en s, en caso
contrario strchr regresa null.
Ejemplo:
char nombre[] = "Oscar E. Palacios";
char *p;
p = strrchr(nombre, 'E');

if (p) {
cout << "nombre contiene a E" <<
endl;
cout << "indice = " << (p nombre) << endl;
}
else cout << "E no est en nombre" <<
endl;

strstr(): Buscar subcadena


Sintaxis: char *strstr(const char *s1, char *s2);
Comentarios: strstr busca en s1 la subcadena s2. La bsqueda se lleva a cabo desde el inicio hasta el final de
s1.
Regreso: si la operacin es exitosa strstr regresa un puntero hacia la primera ocurrencia de s2 en s1, en caso
contrario strstr regresa null.
Ejemplo:
char

s[]

"Un

barco

de

tristeza";
char *p;
p = strstr(s, "barco");
if (p) {
cout << "barco est en
s" << endl;
cout << "indice = " <<
(p - s) << endl;
}
else cout << "barco no est en
s" << endl;

Cadenas en C++[editar]
En la seccin anterior descubrimos
algunas funciones para trabajar con
cadenas de caracteres al estilo de C
estndar, si bien no est de ms tener tal
conocimiento, tambin es cierto que C++
es un lenguaje de programacn
orientado a objetos, de tal manera que
ciertos compiladores ( como el gcc,

utilzado porBloodshed Dev-C++ y otros


tantos entornos de desarrolo ) dan
soporte a la clase cstring, que no debe
confundirse con la <string.h>.
Nota: Bloodshed Dev-C++ es un IDE (Editor con Depurador Integrado) para programar en C++ en un ambiente
grfico para Windows, distibuido gratuitamente bajo licencia GPL GNU y usted puede encontrarlo
aqu: www.bloodshed.net. Actualmente (febrero de 2008) se recomienda bajar la versinDev-C++ 4.9.9.2.
Nota:Como el Dev-c++ ya esta descontinuado, es recomendable usar su extensin Wx Dev-C++ que esta
actualmente activa y es recomendable para muchos proyectos bajo el lenguaje C++, este programa tambien es
licencia GPL, podras descargarlo desde=wxdsgn.sourceforge.net, y encontraras informacion de este
aqui=es.wikipedia.org/wiki/WxDev-C%2B%2B.
Una de las ventajas que ofrece la
clase cstring es
que,
a
diferencia de las cadenas
estndar,
sta
posee
la
capacidad de crecer o disminuir
su tamao en tiempo de
ejecucin. Adems, entre otras
caracteristicas destacables, la
clase string soporta operaciones
de
asignacin
tales
como: =, +, +=,
etc.;
y
de
comparacin tales como: ==, <=,
etc.
Para tener una idea bsica sobre
las cadenas en C++ veamos el
siguiente programa:
Nota: en el programa se debe de observar el uso del operador de asignacin +=, algo que no es posible hacer
con las cadenas estndar.
Un estudio exhaustivo sobre
la clase string requiere de un
captulo completo, ya que la
misma, segn el manual de
referencia de C++, posee
aproximadamente
33
mtodos
y
unos
7
constructores; adems de los
atributos.

Arrays

en

C++

[editar]
As como C++ da aternativas
elegantes
para
la
manipulacin de cadenas de
caracteres, tambin da el
soporte para la manipulacon
de arrays dinmicos. Este

tema ser ampliado en el


captulo Libreria de Plantillas
Estndar STL, sin embargo
para tener una idea de lo que
vendr mostraremos aqu un
ejemplo sencillo en donde se
usar
la
clase
plantilla vector

También podría gustarte