Para facilitar el lenguaje nos referiremos a un array de una dimensión como un vector en este texto. En otros contextos podemos encontrar el término lista para referirse también a un array de una dimensión.
En el ejemplo declaramos en la línea 1 un vector llamado v que tiene un tamaño de 2 elementos. Para poder acceder a cada uno de los elementos del vector (para usarlos o para asignarles un valor) es necesario especificar el nombre del vector y la posición del elemento entre corchetes tal y como vemos en las líneas 3 y 4. El indice utilizado para acceder a un elemento empieza a contar en 0 de forma que si tenemos 2 elementos, sus índices serán 0 y 1.
Como Declarar Un Vector De Caracteres En C
Es necesario especificar el tamaño del vector en el momento de su declaración, ya sea explicitamente entre corchetes o bien mediante una lista de valores que le asignamos. En ocasiones puede suceder que no conozcamos el número de elementos que vamos a manejar en el momento de la declaración. Siempre cabe la posibilidad de declarar un vector de un tamaño muy grande y utilizar luego solo una parte del mismo. No es lo más recomendable pero es posible hacerlo.
Una operación muy frecuente es recorrer los elementos de un vector, bien para asignarles un valor o bien para leer su valor y operar con él. Para ello utilizaremos un bucle con una estructura de control y una variable que actue como contador y que nos sirva de índice para acceder a cada elemento del vector.
Cuando definimos una función que acepta un vector como parámetro, en la definición del parámetro pondremos el equivalente a una declaración normal del vector. No es obligatorio indicar el tamaño del vector (entre corchetes), pero si es recomendable hacerlo (y pasar también una variable que represente ese tamaño) ya que cuando manejemos arrays de múltiples dimensiones si deberemos hacerlo.
En la llamada a la función de la línea 18 vemos como se pasan ambos vectores como argumentos. Se pasan los dos de la misma forma independientemente de que uno de ellos se va a modificar en la función y el otro no.
En el ejemplo se ha definido una función llamada cambiar que intercambia el valor de dos datos enteros que recibe como parámetros. Invocamos a esa función pasando los dos primeros elementos del vector (por referencia) para que la función los intercambie. Vemos que se realiza igual que si fueran dos variables enteras normales.
A la función memcmp tenemos que pasarle como argumentos los dos vectores que deseamos comparar y un tercer argumento que es el tamaño en bytes de elementos que queremos comparar. Para obtener este tamaño podemos multiplicar el tamaño de un elemento del vector por el número de elementos o bien preguntarle al vector su tamaño directamente.
Para definir un vector de caracteres en C debemos indicar entre corchetes la cantidad de caracteres a reservar y tener en cuenta que uno de esas posiciones se utilizará como caracter de control, es decir que si tenemos que almacenar 10 caracteres al vector lo definiremos de 11 caracteres.
El tamaño 16 no es un capricho, si contamos la cantidad de caracteres que hay entre las comillas incluyendo el espacio en blanco veremos que es 15. Luego recordar que debe haber un caracter extra en el vector donde se indica que ahí finalizan los datos de la cadena. No hay problema si el vector reserva más de 16 caracteres, en cambio se generarán errores inesperados si el vector tiene menos de 16 caracteres.
Como sabemos en el vector de caracteres se almacenan los que ingresó el operador por teclado y luego del último se guarda el caracter ASCII NULL que en el lenguaje C se lo representa por '\0'. Entonces debemos disponer un ciclo while que se repita mientras no encontremos el terminador de cadena:
Como podemos observar es mucho más compacta la impresión con un único printf (el orden que indicamos las variables debe coincidir con los indicados en la cadena de formato %s %i luego indicamos palabra que es un vector de caracteres y cant que es un int):
estoy presentando problemas a la hora de entender como llenar un arreglo de caracteres en C e imprimir esos datos ingresados, me gustaría saber cual es la forma adecuada de trabajarlo ya que a la hora de compilar solo me arroja un solo elemento del arreglo.
Las cadenas de caracteres (también llamadas cadenas o strings) son un tipo particular de vectores, que como su nombre lo dice son vectores de char, con la particularidad que tienen una marca en el fin del mismo (el caracter '\0'), además el lenguaje nos permite escribirlas como texto dentro de comillas dobles si son simples no. Veamos unos ejemplos de su declaración:
Cómo vimos anteriormente al declarar un vector se define la cantidad de elementos que puede contener, en el caso de las cadenas se debe tener en cuenta el espacio adicional necesario para el \0. Viendo el ejemplo, tanto cadena_hola y otro_hola tienen un largo 5 y cadena_vacia tiene un largo de 1.
También vimos anteriormente que al usar vectores debemos tener en cuenta su largo, y así es que el largo o cantidad de elemento lo necesitamos en todas las funciones que definimos usando vectores y lo recibimos como un parámetro más en estas, en el caso de las cadenas al tener una marca de fin podemos prescindir del largo y procesar una cadenas hasta llegar a la marca de fin.
Se debe tener en cuenta que el largo de una cadena y el largo del vector con la que se representa son distintos, tanto por como largo_cadena() cuenta el largo de la cadena, como por espacio_cadena del ejemplo anterior.
Los vectores son un tipo de array (arreglos). Son, de hecho, un array de una sola dimensión y forman parte de la amplia variedad de estructuras de datos que nos ofrece C++, siendo además una de las principales y más útiles estructuras que podremos tener como herramienta de programación. Los vectores o arrays o arreglos de una dimensión (como los quieras llamar), son utilizados para almacenar múltiples valores en una única variable. En un aspecto más profundo, este tipo de arrays (vectores), permiten almacenar muchos valores en posiciones de memoria continuas, lo cual permite acceder a un valor u otro de manera rápida y sencilla. Estos valores pueden ser números, letras o cualquier tipo de variable que deseemos incluso tipos de datos complejos.\r\n\r\nEn múltiples ocasiones es necesario almacenar gran cantidad de información en una variable y a menudo sucede que no conocemos con exactitud la cantidad de datos que debemos almacenar, pero sabemos que sí sería más de uno, como por ejemplo almacenar las identificaciones de las personas ingresadas al sistema. Los vectores, arreglos (arrays) de una dimensión (ya sabes cómo es) son una estructura que nos permite solucionar este tipo de problemas. Para explicar mejor de lo que hablo, pongamos un ejemplo:\r\n\r\nEjemplo de arrays de una dimensión o Vectores en C++\r\n\r\nImaginemos que queremos crear un programa con el cual podamos de algún modo almacenar los títulos y los autores de diferentes libros. El usuario es el encargado de suministrar la información de cada libro, así entonces, dado que es el usuario quien lo hace, nosotros no tenemos manera alguna de saber cuántos libros va querer él ingresar por medio de nuestro programa. El caso principal es que queremos almacenar en la memoria el titulo y el autor de TODOS y cada uno de los libros. Entonces cómo crees que podrías hacer esto? Con lo que sabemos hasta hora, se nos podrían ocurrir un par de cosas. Veamos:\r\n\r\nPosible Solución 1: Sin usar vectores (errónea): \r\n\r\nPodríamos pensar primero, \"listo, está bien, es fácil, declaro una variable llamada titulo y otra autor, ambas de tipo string y se las pido al usuario\", pues bien, esta solución digamos que nos permite almacenar la información del primer libro que el usuario ingrese, pero en cuanto desee ingresar otro libro qué vamos a hacer?, si lo hacemos así, cuando el usuario ingrese la información para un nuevo libro, va a sobrescribir los valores anteriores y habremos perdido la información del primero, de manera que esta solución no es válida.\r\n\r\nPosible Solución 2: Sin usar vectores o matrices (errónea): \r\nPensando un poco más en esto, se nos ocurre una forma de almacenar la información de cada libro, podríamos crear un par de variables distintas para cada libro. Pero de inmediato nos damos cuenta que si por ejemplo al usuario se le cruzara por la cabeza ingresa información para 10 libros tendríamos entonces 20 variables distintas!, 2 por cada libro, no es mucho, pero si se le ocurriera ingresar 1000 libros, estarías dispuesto a declarar 2000 variables?. De modo que esta alternativa es incluso peor que la anterior y seguimos aún sin solucionar nuestro problema.\r\n\r\nPosible Solución 3: Usando vectores o matrices (correcta): \r\n\r\nPues bien!, tal y como mencioné antes, los arrays de una simensión o los vectores han venido para ayudarnos en múltiples circunstancia similares a esta. Dado que un array, arreglo unidimensional o vector es capaz de almacenar múltiples valores en una misma variable, tenemos el elemento perfecto para almacenar la información de todos los libros, podremos crear un vector de un tamaño cualquiera capaz de contener en sí los nombres de los autores y otro con los títulos de los libros o alternativamente podríamos crear una matriz de dos columnas que contenga en la primera columna los autores y en la segunda los títulos; ambas soluciones son validas y vamos a ver ambas, usando vectores en esta sección y usando matrices en la sección de matrices.\r\nNota: En C++, a diferencia de algunos otros lenguajes de programación, los vectores y las matrices presentan un \"inconveniente\" con el tamaño. Es decir, no es posible crear de una manera sencilla un vector capaz de almacenar una cantidad de información indefinida, es necesario ingresar con antelación la cantidad de datos (tamaño) que el vector o la matriz tendrá. Este problema se puede solucionar, pero es algo que no veremos en esta sección. Si buscas cómo crear vectores de tamaño dinámico o matrices de tamaño dinámico, te recomiendo ver la sección de Punteros en C++. No te recomiendo ver esa sección sin antes haber entendido esta.\r\nMuy bien, ahora que sabemos la gran utilidad de los vectores o arreglos (arrays) para nosotros, aprendamos más acerca de estos, veamos como declarar un vector, array o arreglo de una dimensión, como recorrer un vector y algunos ejemplos de esto en C++.\r\n\r\nCómo declarar un Array de una dimensión o Vector en C++?\r\nPara declarar un vector en C++, se deben seguir las mismas normas básicas que se siguen para declarar una variable cualquiera, con un pequeño cambio en la sintaxis. Para declarar un vector, arreglo o como lo quieras llamar, necesitaremos saber el tipo de los datos que irán al interior de este, es decir, serán número enteros, o numero decimales o cadenas de texto, etc. necesitamos también, como siempre, un nombre para el vector y un tamaño máximo. La sintaxis para declarar un vector en C++ es la siguiente:\r\n\r\n\r\ntipo_de_dato nombre_del_vector[tamanio];\r\n\r\n\r\nTenemos entonces, tal como mencioné antes, que para declarar un vector en C++, debemos definirle un tipo de los datos, sea entero, float, string, etc., debemos darle un nombre y al interior de los corchetes \"[]\" debemos poner el tamaño máximo que tendrá el vector, es decir la cantidad máxima de datos que podrá contener (recuerda que en C++ esto es necesario hacerlo). Veamos un ejemplo en el cual pondré la declaración de varios vectores de diferentes tipos y tamaños en C++.\r\n\r\nDeclaración de un Array unidimensional o Vector en C++\r\n\r\n\r\nint my_vector1[10];\r\nfloat my_vector2[25];\r\nstring my_vector3[500];\r\nbool my_vector4[1000];\r\nchar my_vector5[2];\r\n\r\n\r\nVeamos rápidamente que representa cada línea del código anterior.\r\nLínea 1\r\nEsta línea contiene la declaración de un vector llamado my_vector1, el cual contendrá un máximo de 10 elementos de tipo entero.\r\nLínea 2\r\nEsta línea contiene la declaración de un vector llamado my_vector2, el cual contendrá un máximo de 25 elementos de tipo float.\r\nLínea 3\r\nEsta línea contiene la declaración de un vector llamado my_vector3, el cual contendrá un máximo de 500 elementos de tipo string.\r\nLínea 4\r\nEsta línea contiene la declaración de un vector llamado my_vector4, el cual contendrá un máximo de 1000 elementos de tipo booleano.\r\nLínea 5\r\nEsta línea contiene la declaración de un vector llamado my_vector5, el cual contendrá un máximo de 2 elementos de tipo char.\r\n\r\nYa que está claro cómo se declara un vector, vamos a ver cómo inicializarlo, es decir inicializar un vector en C++ o en otras palabras darle valores a un vector.\r\n\r\nCómo inicializar un Array o Vector en C++?\r\nEn cuanto tenemos declarado un vector, es posible asignarle valores, evidentemente estos valores deben coincidir con el tipo de dato que le asignamos a dicho vector, no tendría sentido ingresar como valores de un vector cadenas de caracteres si el tipo de dato de dicho vector es numérico.\r\n\r\nVoy a mostrar a continuación formas distintas de inicializar un vector, todas son validas, ya es cuestión de nuestras necesidades y conocimientos determinar cuál es útil y en qué momento. Veamos entonces:\r\n\r\nForma 1 de declarar un Array o Vector en C++\r\n\r\n\r\nstring vector[5] = \"5\", \"hola\", \"2.7\", \"8,9\", \"adios\";\r\n\r\n\r\nAquí hemos declarado un vector de tipo string tamaño 5 y lo hemos inicializado con diferentes valores, es necesario notar que cada valor va entre comillas dobles \"\" puesto que son strings. El valor inicial corresponde a la casilla o índice 0 y tiene el valor de \"5\", el índice 1 el valor es \"hola\" y el índice 4 el valor es \"adiós\", es importante notar que el primer índice de n array o vector no es el UNO sino que es el CERO.\r\n\r\nForma 2 de declarar un Array o Vector en C++\r\n\r\n\r\nint vector2[] = 1,2,3,4,10,9,80,70,19;\r\n\r\n\r\nAquí hemos declarado un vector de tipo int y no especificamos su tamaño, si el tamaño no se especifica entre los corchetes, el vector tendrá como tamaño el número de elementos incluidos en la llave, para este caso es 9.\r\n\r\nParticularidades de los Arrays, arreglos o Vectores en C++\r\nCon C++, existen algunas particularidades, en cuanto a la declaración de vectores, que me parece importante destacara para que en momento de quizá caer en ellas comprender como podrían cambiar las cosas o básicamente en que consiste el error, veamos: \r\n\r\nParticularidad 1 al momento de declarar o inicializar un Vector o Array en C++ \r\n\r\n\r\nint vector2[3];\r\nvector2[3] = 1,5,10;\r\n\r\nDadas las características de C++, es fácil pensar que és factible crear o declarar un vector de un tamaño cualquiera y posteriormente inicializarlos de forma habitual como se muestra en este código, sin embargo hacer esto es un error, si declaramos un vector y no lo inicializamos inmediatamente, no es posible inicializarlo de la forma que hemos visto, es decir entre llaves cada valor, como en la línea 2 del código anterior. La única forma de inicializar el vector, o mejor dicho, darle valores a cada una de sus casillas, es hacerlo uno por uno, es decir darle un valor a la casilla cero a la uno y a la 2 (para un vector de tamaño 3). Por defecto, al declarar un vector sin ser inicializado, cada una de las casillas de este vector toma como valor el valor por defecto del tipo de variable, para el caso de los enteros (int) es -858993460. Así entonces para asignar valores a cada casilla lo hacemos así: \r\n\r\n\r\nint vector2[3];\r\nvector2[0] = 1;\r\nvector2[1] = 3;\r\nvector2[2] = 10;\r\n\r\n\r\nEs importante notar en este código, que el número que va entre corchetes ya no indica tamaño (pues vector2 ya está declarado) sino que indica el índice o el numero de la casilla con la cual estaremos operando (recordemos que el primer índice es cero y no uno), en el código anterior, habíamos declarado un vector de tamaño 3, por lo cual debíamos asignar valores a los índices 0, 1 y 2.\r\n\r\nParticularidad 2 al momento de declarar o inicializar un Vector o Array en C++ \r\n\r\n\r\nfloat vector3[5] = 10.5;\r\n\r\n\r\nEn C++ a la hora de inicializar un array, arreglo o Vector, estamos acostumbrados a que si inicializamos inmediatamente después de declarar el vector, debemos poner la misma cantidad de elementos al interior de las llaves de manera que corresponda con el tamaño del vector, pues bien, estos es lo más recomendable, sin embargo si ponemos una cantidad de elementos menor a la del tamaño real del vector, estamos queriendo decir que estos elementos toman los valores puestos entre las llaves y los demás serian cero, para el caso del código anterior el primer elemento (el del índice cero) va a tener un valor de 10.5 y los otros 4 elementos van a valer cero.\r\n\r\nYa tenemos claro cómo declarar un array o vector en C++, algunas características un tanto particulares de estos, sin embargo aun no sabemos cómo obtener los datos de un array, es decir una vez el array o vector este lleno con los elementos que queremos, como podemos obtener esa información y más aun, como obtener un valor específico dentro del array. Veámoslo:\r\n\r\nObtener el valor de una casilla específica en un array en C++\r\n\r\nEs muy común el caso en el que tenemos un vector con una enorme cantidad de elementos, sin embargo de todos estos, solo nos interesa uno en especial y corremos con la suerte de saber cuál es su índice, sabiendo el índice de un elemento en un array es bastante sencillo obtener el valor de este: \r\n\r\n\r\nfloat vector4[5] = 10.5, 5.1, 8.9, 10, 95.2; \/\/Array con 5 elementos\r\nfloat numero5 = vector4[4]; \/\/Para acceder al elemento 5, se usa el índice 4\r\nfloat primerNumero = vector4[0]; \/\/Para el primer elemento se usa el índice 0\r\n\r\n\r\nComo podemos ver, para acceder a un valor específico conociendo el índice del elemento, solo basta con escribir dicho índice entre los corchetes \"[ ]\", recuerda que el índice comienza desde cero, así por lo tanto en un vector de 5 elementos (como el del ejemplo), el último elemento esta en el índice 4 y el primer elemento del array en el índice 0.\r\n\r\nYa tenemos entonces una forma de acceder de forma individual a un elemento de un array o vector, vamos a ver ahora como recuperar todos los elementos de un vector de forma simple\r\n\r\nRecorrer un Array o Vector en C++\r\n\r\nPara obtener todos los datos que se encuentran al interior de un vector, es necesario recorrer el array o vector, para recorrerlo, se usa casi siempre un ciclo for, en algunos casos mas específicos un ciclo while, pero generalmente el ciclo for es el ideal para esto, dado que conocemos el tamaño del array. La lógica de este procedimiento es la siguiente, el ciclo for comenzara desde cero e ira hasta el tamaño del vector, de modo que la variable de control que generalmente llamamos \"i\", será la que va a ir variando entre cero y el tamaño del array, de esta forma al poner la i al interior de los corchetes, estaremos accediendo al valor de cada casilla del vector y podremos hacer lo que sea necesario con dicho valor, veamos: \r\nNota: A veces no es posible determinar con facilidad el tamaño exacto de un vector, pero en C++ existen varias formas de determinar el tamaño de un array o vector fácilmente, aquí explicare un método. Cabe notar que este tamaño es el que ira como tope del ciclo for y sería equivalente a que nosotros mismos, en caso de saber el tamaño del vector, lo pongamos allí, sin embargo como veremos en otra sección no siempre es posible saber con certeza el tamaño de un vector, es por esto que explico cómo hacerlo.\r\n\r\n\r\n#include \"iostream\"\r\n\r\nusing namespace std;\r\n\r\nint main()\r\n{\r\n int edades[] = 1,2,9,8,16,32,9,50,36,20,1,87;\r\n int limite = (sizeof(edades)\/sizeof(edades[0]));\r\n for (int i = 0; i 2ff7e9595c
Comments