Arreglos y Cadenas en C
Arreglos y Cadenas en C
Arreglos y Cadenas en C
py/categoria
/escritorio) » C / C++ (https://www.programacion.com.py/categoria/escritorio/c) » ARREGLOS Y CADENAS
en C++
(//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.
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.
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
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
Cada vez que el bucle for incrementa a la variable “i”, el programa imprime el siguiente elemento del arreglo.
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:
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
23
24 main()
25
26 {
27
28
29
30 iinntt numeros[3];
31
32 iinntt i;
33
34
35
36 traer_valores(numeros, 3);
37
38 cout << "Los valores del arreglo son : ";
39
40
ARREGLOS MULTIDIMENSIONALES
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
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
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 “,”.
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
5
6 vvooiidd mostrar_cadena(cchhaarr cadena[])
7
8 {
9
10 cout << cadena;
11
12 }
13
14
15
16 main()
17
18 {
19
20
21
22 mostrar_cadena("Cadena de caracteres: ");
23
24 mostrar_cadena("Una cadena es un arreglo de tipo char.");
25
26
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
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
7
8 main()
9
10 {
11
12
13
14 cchhaarr titulo[] = "Aprenda C++";
15
16 cchhaarr capitulo[] = "Arreglos y Cadenas";
17
18
19
20 cout << "Mayúsculas: " << strupr(titulo);
21
22 cout << "\n\nMinúsculas: " << strlwr(capitulo);
23
24
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
31
32 #include <iostream.h>
33
34 #include <stdio.h>
35
36 #include <string.h>
37
38
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
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
67
68 pprriinnttff("El nombre mayor alfabéticamente es %s\n",cadena);
69
70
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.
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)
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)
(https://www.programacion.com.py/escritorio/c/manual-basico-de-c) Manual
básico de C++
Comenzá la discusión...
Sé el primero en comentar.
La conexión ha caducado
El servidor www.facebook.com está tardando
demasiado en responder.
Activar wifi
Reintentar
GITHUB
(https://github.com/ProgramacionComPy)
ACERCA DE
ENTRADAS RECIENTES
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
(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
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)
(https://www.facebook.com/pages/Programacioncompy/170660109749450) (https://twitter.com