Você está na página 1de 15

Inicio (https://www.programacion.com.py) » Escritorio (https://www.programacion.com.

py/categoria
/escritorio) » C / C++ (https://www.programacion.com.py/categoria/escritorio/c) » ARREGLOS Y CADENAS
en C++

ARREGLOS Y CADENAS en C++


Rodrigo Paszniuk (https://www.programacion.com.py/author/raps) | 2013-04-23 | 0 Comments
(https://www.programacion.com.py/escritorio/c/arreglos-y-cadenas-en-c#disqus_thread)

(//m.addthis.com/live/redirect/?url=mailto
%3A%3Fbody%3Dhttps%253A%252F%252Fwww.programacion.com.py%252Fescritorio%252Fc%252Farreglos-
y-cadenas-en-c%26subject%3DARREGLOS%2520Y%2520CADENAS%2520en%2520C%252B%252B&
uid=5a71578ca7991598&pub=ra-513297721cbba692&rev=v8.2.5-wp&per=unde�ned&pco=tbx32-300)

View Our
1.4 Million Lawyer
Rated Lawyers Directory
www.avv…

Como ya sabemos, los programas almacenan información en las variables. Hasta ahora, las variables utilizadas
sólo guardaban un valor. Sin embargo, en muchos casos los programas necesitarán guardar muchos valores al
mismo tiempo, tales como 50 cali�caciones, 100 nombres de archivo o 1000 títulos de libros. Cuando los
programas necesitan almacenar muchos valores de�nen un arreglo. Es decir que un aarrrreegglloo es una variable
capaz de guardar uno o más valores.

Cómo declarar una variable arreglo


Al igual que las variables que se han utilizado hasta este momento, un arreglo debe tener un tipo (como int,
char o �oat) y un nombre. Además, habrá que especi�car el número de valores que almacenará.

Todos los valores que se almacenen en un arreglo deben ser del mismo tipo.

La siguiente declaración crea un arreglo llamado “cali�caciones” que puede contener 100 cali�caciones de
exámenes expresadas como números enteros:   int cali�caciones [100];

Cuando el compilador encuentra la declaración de variable, asignará la su�ciente memoria para que contenga
100 valores del tipo int. Cada valor es un elemento del arreglo.

Cómo utilizar los elementos de un arreglo


Veamos el programa  3300A
ARRRREEG
GLLO
O..CCPPPP:
1
2 #include <iostream.h>
3
4 main()
5
6 {
7
8 iinntt valores[5]; // Declaración del arreglo
9
&nbsp;

En primer lugar se de�ne un arreglo de tipo int llamado “valores”. Los corchetes “[]” de�nen una matriz con
subíndice, y en el caso del ejemplo, el 5 entre corchetes de�ne 5 campos de datos, tipo int, todo ello de�nido
como variable “valores”. En C, llooss ssuubbíínnddiicceess eem
mppiieezzaann ddeessddee 00, y se incrementan de uno en 1 hasta el
máximo valor, en este caso, 4. Tenemos, por tanto, 5 variables tipo int, denominadas: “valores[0]”, “valores[1]”,
hasta “valores[4]”.

Recordemos siempre que al partir de 0, los subíndices tienen como máximo valor una posición menos que en
su de�nición.

Cuando los programas utilizan arreglos, el procedimiento más común es utilizar una variable índice para indicar
a los elementos del arreglo. En el siguiente programa, 3311A ARRRREEG
GLLO
O22..CCPPPP, se utiliza el índice dentro de un
bucle for, que inicia al índice “i” en 0. El bucle termina cuando “i” es mayor que 4 (el último elemento del
arreglo):
1
2 #include <iostream.h>
3
4 main()
5
6 {
7
8 iinntt valores[5]; // Declaración del arreglo
9
10 iinntt i;
11
12 &nbsp;
13
14 valores[0] = 100;
15
16 valores[1] = 200;
17
18 valores[2] = 300;
19
20 valores[3] = 400;
21
22 valores[4] = 500;
23
&nbsp;

Cada vez que el bucle for incrementa a la variable “i”, el programa imprime el siguiente elemento del arreglo.

Inicializar un arreglo en la declaración


Como ya se ha visto, C++ permite inicializar las variables en el momento de su declaración. Lo mismo puede
hacerse con un arreglo, especi�cando los valores iniciales colocándolos entre llaves. Por ej:  int valores[5] =
{100, 200, 300, 400, 500 };

Si no se especi�ca el tamaño de un arreglo que se inicializa en una declaración, C++ asignará la su�ciente
memoria para que contenga el número de valores especi�cados, por ejemplo, la siguiente declaración crea un
arreglo capaz de guardar cuatro valores enteros:

int numeros[ ] = {1, 2, 3, 4 };

Las funciones trabajan con arreglos


Una función puede inicializar al arreglo, operar con sus valores o mostrarlos por pantalla.

Para que la función trabaje con el arreglo se debe especi�car su tipo, no necesariamente su tamaño.
Normalmente se pasará un parámetro que especi�que el número de elementos que hay en el arreglo.

El programa 3322A
ARRRR__FFU
UNN..CCPPPP pasa los arreglos a la función “mostrar_arreglo”, que presenta los valores por
pantalla:
1
2 #include <iostream.h>
3
4 vvooiidd mostrar_arreglo(iinntt arreglo[], iinntt nro_elementos)
5
6 {
7
iinntt i;

El programa anterior simplemente pasa el arreglo a la función por medio del nombre. El siguiente programa,
3333TTR
RAAEERRA
ARRRR..CCPPPP, utiliza la función “traer_valores” para asignar tres valores al arreglo “numeros”:
1
2 #include <iostream.h>
3
4 vvooiidd traer_valores(iinntt arreglo[], iinntt nro_elementos)
5
6 {
7
8 iinntt i;
9
10 ffoorr (i=0; i < nro_elementos; i++)
11
12 {
13
14 cout << "Introducir valor " << i << " : ";
15
16 cin >> arreglo[i];
17
18 }
19
20 }
21
22 &nbsp;
23
24 main()
25
26 {
27
28 &nbsp;
29
30 iinntt numeros[3];
31
32 iinntt i;
33
34 &nbsp;
35
36 traer_valores(numeros, 3);
37
38 cout << "Los valores del arreglo son : ";
39
40 &nbsp;

ARREGLOS MULTIDIMENSIONALES

Veamos el programa 3344M


MUULLTTIIA
ARRRR..CCPPPP como un ejemplo del trabajo con arreglos multidimensionales
(matrices):
1
2 #include <iostream.h>
3
4 #include <stdio.h>
5
6 &nbsp;
7
8 main()
9
10 {
11
12 iinntt i,j;
13
14 iinntt arr1[8][8];
15
iinntt arr2[25][12];

La variable “arr1” es un arreglo de 8×8, que contiene 8 veces 8, o 64 elementos en total. El primer elemento es
“arr1[0][0]”, y el último “arr1[7][7]”. Otro arreglo, “arr2” es también de este tipo, pero no es cuadrado, para que
se vea que un arreglo multidimensionado no debe ser necesariamente cuadrado. Ambos arreglos están
rellenos con datos, que representan una tabla de multiplicar, y, una tabla de sumar, el otro.

Para ilustrar que elementos individuales pueden ser modi�cados, a uno de los elementos de “arr1” se le asigna
uno de los elementos de “arr2”, tras ser multiplicado por 22 (línea 18). En la siguiente línea, se le asigna a
“arr1[2][2]” el valor arbitrario 5, y se lo usa para el subíndice del siguiente mandato de asignación. El tercer
mandato de asignación es en realidad “arr1[5][5] = 177”, porque cada uno de los subíndices contiene el valor 5.
Esto sirve a título de ilustración de que cualquier expresión valida puede usarse como subíndice, sólo debe
cumplir 2 reglas, una es que debe ser un entero (aunque un “char” numérico también valdría), y la otra es que
debe estar en el límite del subíndice del arreglo, y no sobrepasarlo.

El contenido total de la matriz “arr1” se imprime por pantalla, en forma de cuadrado, con lo cual podemos
comprobar por los valores si el programa hace lo que imaginábamos.
Declaración de una cadena de caracteres
Las cadenas de caracteres almacenan información tal como nombres de archivos, títulos de libros, nombres de
empleados, y otras combinaciones de caracteres.

C++ guarda las cadenas de caracteres en un arreglo del tipo char que termina con un caracter nulo (NULL), por
lo tanto, para declarar una cadena de caracteres simplemente se declara un arreglo de tipo char con los
su�cientes elementos como para contener los caracteres deseados. Por ejemplo, la siguiente declaración crea
un nombre de variable de cadenas de caracteres  “nombre_archivo” capaz de almacenar 13 caracteres (el
caracter NULL es uno de estos 13):    char nombre_archivo[13];

La diferencia principal entre las cadenas de caracteres y otros tipos de arreglos es cómo C++ indica el �nal del
arreglo.

Este �nal se representa utilizando un caracter NULL (NULO), que C++ representa con el caracter especial “\\00”.
Cuando se asignan caracteres a la cadena, se debe poner el caracter null después del último elemento. Por
ejemplo, el programa 3355A
ALLFFA
ABBEETTO
O..CCPPPP, asigna las letras de la A a la Z a la variable “alfabeto” utilizando un
ciclo for:

1
2 #include <iostream.h>
3
4 &nbsp;
5
6 main()
7
8 {
9
10 cchhaarr alfabeto[27]; // 26 letras más NULL
11
12 cchhaarr letra;
13
14 iinntt i;
15
16 ffoorr (letra='A', i = 0; letra <='Z'; letra++, i++)
17
18 alfabeto[i] = letra;
19
20 &nbsp;
21
22 alfabeto[i] = NULL;
23
24 cout << "Las letras son: " << alfabeto;
25
}

Como puede verse, en la línea 13, el programa asigna el caracter NULL a la cadena para indicar el último
caracter de la misma.

Cuando el operador cout presenta la cadena, muestra los caracteres hasta  llegar al nulo.

Veamos ahora el bucle for  que aparece en la línea 10. Este bucle inicializa e incrementa dos variables. Cuando
un bucle for inicializa o incrementa más de una variable se separan las operaciones utilizando una coma “,”.

En qué di�ere ‘A’ de “A”


Al examinar los programas de C++ podemos ver caracteres contenidos dentro de apóstrofes (Ej: ‘A’) y
caracteres dentro de comillas (“A”). Un caracter que está entre apóstrofes es un caracter constante. El
compilador de C++ solamente asigna un byte de memoria para guardar un caracter constante. Sin embargo, un
caracter encerrado entre comillas contiene una cadena constante.
El caracter y un caracter nulo que asigna el compilador (el compilador asigna automáticamente el caracter
NULL a una cadena constante). Por lo tanto, el compilador asignará dos bytes para guardar esta cadena.

Cómo inicializar una cadena de caracteres


Para inicializar una cadena de caracteres en la declaración, simplemente se especi�ca la cadena deseada
encerrándola entre comillas, ej: char titulo[40] = “Aprenda C++”;

Si el número de caracteres asignado a la cadena es menor que el tamaño del arreglo, la mayoría de los
compiladores del C++ asignarán caracteres NULL al resto de la cadena.

Como ya se ha visto para los arreglos, si no se especi�ca el tamaño de la cadena, el compilador de C++ asignará
la su�ciente memoria como para contener las letras especi�cadas, más el caracter NULL. Ej: char titulo[] =
“Aprenda C++”;

Cadenas y funciones
Como en el caso de cualquier arreglo, para trabajar con una cadena en una función, simplemente debemos
especi�car el tipo de arreglo (char). No se tiene que especi�car el tamaño de la cadena. Por ejemplo, en el
programa 3366SSH
HOOW
W__CCA
ADD..CCPPPP, se utiliza la función “mostrar_cadena” para mostrar por pantalla una cadena de
caracteres:

1
2 #include <iostream.h>
3
4 &nbsp;
5
6 vvooiidd mostrar_cadena(cchhaarr cadena[])
7
8 {
9
10 cout << cadena;
11
12 }
13
14 &nbsp;
15
16 main()
17
18 {
19
20 &nbsp;
21
22 mostrar_cadena("Cadena de caracteres: ");
23
24 mostrar_cadena("Una cadena es un arreglo de tipo char.");
25
26 &nbsp;
27
}

Como ya sabemos, C++ utiliza el caracter NULL para indicar el �nal de una cadena. A continuación veremos el
programa 3377LLO
ONNG
G__CCA
ADD..CCPPPP, que contiene una función que busca el caracter NULL para determinar el
número de caracteres que contiene una cadena.

Cuando examinemos más programas C++ encontraremos que muchas funciones buscan en esta forma el
caracter NULL dentro de una cadena de caracteres.
1
2 #include <iostream.h>
3
4 &nbsp;
5
6 iinntt long_cadena(cchhaarr cadena[])

La biblioteca string.h
El archivo string.h contiene muchas funciones para manipular cadenas. Por ejemplo, la función ssttrruupprr convierte
una cadena de caracteres a mayúsculas. De igual forma, la función ssttrrllw
wrr convierte la cadena a minúsculas.
Mientras que ssttrrlleenn regresa el número de caracteres que hay en una cadena. El programa 3388SSTTR
RIIN
NGG..CCPPPP
ilustra el empleo de las dos primeras:
1
2 #include <iostream.h>
3
4 #include <string.h>
5
6 &nbsp;
7
8 main()
9
10 {
11
12 &nbsp;
13
14 cchhaarr titulo[] = "Aprenda C++";
15
16 cchhaarr capitulo[] = "Arreglos y Cadenas";
17
18 &nbsp;
19
20 cout << "Mayúsculas: " << strupr(titulo);
21
22 cout << "\n\nMinúsculas: " << strlwr(capitulo);
23
24 &nbsp;
25
26 }
27 <h2>SUBRUTINAS DE CADENAS</h2>
28 Veamos otras funciones de la biblioteca string.h en el programa <b>39<i>CADENAS.CP
29
30 &nbsp;
31
32 #include <iostream.h>
33
34 #include <stdio.h>
35
36 #include <string.h>
37
38 &nbsp;
39
40 main()
41
42 {
43
44 cchhaarr nombre1[12],nombre2[12],cadena[25];
45
46 cchhaarr titulo[20];
47
48 ssttrrccppyy(nombre2,"Pedro"); ssttrrccppyy(nombre1,"Margarita");
49
50 ssttrrccppyy(titulo,"Trabajando con cadenas");
51
52 &nbsp;
53
54 pprriinnttff(" %s\n\n",titulo);
55
56 pprriinnttff("Nombre 1 es %s\n",nombre1);
57
58 pprriinnttff("Nombre 2 es %s\n",nombre2);
59
60 ssttrrccppyy(cadena,nombre1); iiff(ssttrrccmmpp(nombre1,nombre2)>0) // devuelve 1 si nombre1
61
62 eellssee
63
64 ssttrrccppyy(cadena,nombre2);
65
66 &nbsp;
67
68 pprriinnttff("El nombre mayor alfabéticamente es %s\n",cadena);
69
70 &nbsp;
71
72 ssttrrccppyy(cadena,nombre1);
ssttrrccaatt(cadena,nombre2); ssttrrccaatt(cadena," ");
73
74 pprriinnttff("Ambos nombres son %s\n",cadena);
75
76 }

Primero se de�nen 4 cadenas. Después, en la línea 10, se utiliza una función de nombre “ssttrrccppyy”, función de
copia de cadenas. Copia una cadena a otra mientras no aparezca NULL en la cadena origen. Tras la ejecución de
este mandato, “nombre1” contendrá  “Margarita” pero sin las dobles comillas, que son sólo para el compilador
(así sabe que estamos de�niendo una cadena). De la misma forma, en la siguiente línea “Pedro” se copia en
“nombre2”, y luego se copia “titulo”. Nótese que no es necesario para la de�nición de cadena el que las dos
cadenas (origen – destino) sean de la misma longitud, tan solo con que destino sea igual a origen+NULL, ya
vale.

En la línea 18 vemos la función “ssttrrccm


mpp”, o función de comparación de cadenas. Devolverá 1 si la primera
cadena es más larga que la segunda, 0 si las 2 tienen la misma longitud y los mismos caracteres, y -1 si la
primera cadena es menor que la segunda. Una de las cadenas, dependiendo del resultado se copia en la
variable “cadena”, y se imprime el nombre más largo alfabéticamente. No debería sorprendernos que “Pedro”
gane, ya que es alfabéticamente mayor, no importa su longitud. También hay que señalar que el resultado varía
in�uido por mayúsculas o minúsculas.

El mandato en la línea 26 tiene otra utilidad, “ssttrrccaatt” o función concatenadora de cadenas (“Suma” de
caracteres). Esta función simplemente añade los caracteres de una cadena al �nal de otra, tomando cuidado de
eliminar el NULL intermedio. En este caso, “nombre1” es copiado en “cadena” en la línea anterior, luego se
concatenan los 2 blancos, y �nalmente la combinación se concatena con “nombre2”. El resultado se imprime,
con los dos nombres en “cadena”.

(//m.addthis.com/live/redirect/?url=mailto
%3A%3Fbody%3Dhttps%253A%252F%252Fwww.programacion.com.py%252Fescritorio%252Fc%252Farreglos-
y-cadenas-en-c%26subject%3DARREGLOS%2520Y%2520CADENAS%2520en%2520C%252B%252B&
uid=5a71578ca7991598&pub=ra-513297721cbba692&rev=v8.2.5-wp&per=unde�ned&pco=tbx32-300)

En: C / C++ (https://www.programacion.com.py/categoria/escritorio/c)  arreglos (https://www.programacion.com.py


/tag/arreglos) c++ (https://www.programacion.com.py/tag/c-2) cadenas (https://www.programacion.com.py/tag/cadenas)

Acerca del autor: Rodrigo Paszniuk (http://www.rodrigopaszniuk.com)


Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas
nuevas.

Posts Relacionados

(https://www.programacion.com.py/web/php/arrays-y-cadenas-en-php) Arrays y

cadenas en PHP
(https://www.programacion.com.py/escritorio/c/manual-intermedio-de-c) Manual

intermedio de C++

(https://www.programacion.com.py/escritorio/c/entradassalidas-standard-en-c)

ENTRADAS/SALIDAS STANDARD en C++

(https://www.programacion.com.py/escritorio/c/manual-basico-de-c) Manual

básico de C++

Siguiente Post → (https://www.programacion.com.py/escritorio/c/estructuras-y-uniones-en-c)


← Anterior Post (https://www.programacion.com.py/escritorio/c/recursividad-en-c)

0 Comentarios Programación Paraguay  John Keneth Vasq…

 Recomendar Mejores primero


⤤ Compartir

Programación Paraguay requiere que verifiques tu correo antes de publicar. Enviar ×


email de verificación a johntesla01@hotmail.com

Comenzá la discusión...

Sé el primero en comentar.

✉ Suscribirse d Agregá Disqus a tu sitioAdd DisqusAñadir 🔒 Privacidad


SEGUÍNOS EN FACEBOOK

La conexión ha caducado
El servidor www.facebook.com está tardando
demasiado en responder.

1. El sitio podría estar temporalmente no


disponible o demasiado ocupado. Vuelva a
intentarlo pasados unos minutos.

2. Si no puede cargar ninguna página, revise la


conexión wifi o de datos de su dispositivo
móvil.

Activar wifi

Reintentar

LOS MÁS VISTOS

Ejercicios resueltos en Ensamblador 8086 (https://www.programacion.com.py/escritorio


/ensamblador/ejercicios-resueltos-en-ensamblador-8086)
Ejemplos de programas en Ensamblador 8086 (https://www.programacion.com.py/escritorio
/ensamblador/ejemplos-de-programas-en-ensamblador-8086)
ARREGLOS Y CADENAS en C++ (https://www.programacion.com.py/escritorio/c/arreglos-
y-cadenas-en-c)
Arboles en C++ (https://www.programacion.com.py/escritorio/c/arboles-en-c)
Pilas en C++ (https://www.programacion.com.py/escritorio/c/pilas-en-c)

GITHUB
(https://github.com/ProgramacionComPy)

ACERCA DE

Programacion.com (http://Programacion.com).py es un sitio web donde podrás encontrar recursos y


documentación de distintos lenguajes de programación.

ENTRADAS RECIENTES

Manual básico de Swift 3 (https://www.programacion.com.py/manuales/manual-basico-de-swift-3)


Estructuras y Protocolos en Swift 3 (https://www.programacion.com.py/varios/swift/estructuras-
y-protocolos-en-swift-3)
Tuplas y Enumeraciones en Swift 3 (https://www.programacion.com.py/varios/swift/tuplas-
y-enumeraciones-en-swift-3)
Clases en Swift 3 (https://www.programacion.com.py/varios/swift/clases-en-swift-3)
Funciones en Swift 3 (https://www.programacion.com.py/varios/swift/funciones-en-swift-3)

ETIQUETAS

android (https://www.programacion.com.py/tag/android-2)
angularjs (https://www.programacion.com.py
/tag/angularjs) c (https://www.programacion.com.py/tag/c-3)
c++ (https://www.programacion.com.py/tag/c-2) cadenas
(https://www.programacion.com.py/tag/cadenas) CentOS

(https://www.programacion.com.py/tag/centos) delphi
(https://www.programacion.com.py/tag/delphi-2) ensamblador
(https://www.programacion.com.py/tag/ensamblador-2) express (https://www.programacion.com.py
/tag/express) Express.js (https://www.programacion.com.py/tag/express-js) fedora
(https://www.programacion.com.py/tag/fedora) framework (https://www.programacion.com.py/tag/framework) funciones
(https://www.programacion.com.py/tag/funciones) gii (https://www.programacion.com.py/tag/gii) google
(https://www.programacion.com.py/tag/google) hibernate (https://www.programacion.com.py

Java
/tag/hibernate) HTML5 (https://www.programacion.com.py/tag/html5)

(https://www.programacion.com.py/tag/java-escritorio) java ee
(https://www.programacion.com.py/tag/java-ee) Javascript (https://www.programacion.com.py

/tag/javascript-2) jsp (https://www.programacion.com.py/tag/jsp) linux


(https://www.programacion.com.py/tag/linux) maven
(https://www.programacion.com.py/tag/maven) MONGODB (https://www.programacion.com.py/tag/mongodb) mvc
(https://www.programacion.com.py/tag/mvc) mysql (https://www.programacion.com.py/tag/mysql) Node.js
(https://www.programacion.com.py/tag/node-js) nodejs (https://www.programacion.com.py
php
/tag/nodejs) phonegap (https://www.programacion.com.py/tag/phonegap-2)

(https://www.programacion.com.py/tag/php-2) PostgreSQL
(https://www.programacion.com.py/tag/postgresql) rails
(https://www.programacion.com.py/tag/rails) red hat (https://www.programacion.com.py
/tag/red-hat) reportes (https://www.programacion.com.py/tag/reportes) rest

(https://www.programacion.com.py/tag/rest) ror
(https://www.programacion.com.py
/tag/ror-2) ruby (https://www.programacion.com.py/tag/ruby-2) soap
(https://www.programacion.com.py/tag/soap) sockets (https://www.programacion.com.py/tag/sockets) sql server

(https://www.programacion.com.py/tag/sql-server) Swift (https://www.programacion.com.py


/tag/swift) ubuntu (https://www.programacion.com.py/tag/ubuntu) web service
(https://www.programacion.com.py/tag/web-service) windows (https://www.programacion.com.py

Yii (https://www.programacion.com.py
/tag/windows)

/tag/yii)
StiloGames (https://www.stilogames.com) Frases 480 (https://www.frases480.com/)
Tecnologia (https://www.tecnologia.com.py)

© 2018 PROGRAMACION.COM (http://PROGRAMACION.COM).PY - Design By Rodrigo Paszniuk


(http://www.rodrigopaszniuk.com)

 (https://www.facebook.com/pages/Programacioncompy/170660109749450)  (https://twitter.com

/ProgComPy)  () () (https://www.programacion.com.py/contactenos) 


(https://www.programacion.com.py/feed)

Você também pode gostar