Bienvenidos sean a este post, hoy veremos como pasar una cadena a una funcion.
Si bien no es muy diferente a todo lo visto anteriormente si tiene algunas sutiles diferencias, veamos como es su forma mas basica de definicion para una funcion:
tipoDato nombreFuncion( char nombreVar[tamaño] )
Definimos la funcion como siempre pero al momento de pasar el argumento lo definiremos con un tamaño para que pueda almacenar una cantidad de informacion en la «cadena», otra forma de definirlo es la siguiente:
tipoDato nombreFuncion( char nombreVar[] )
Este es igual al anterior pero sin informar un tamaño para la cadena dado que este se ajustara automaticamente al recibir el tamaño del array que usaremos como cadena, para verlo un poco mejor vamos a hacer un ejemplo practico, para ello generen un nuevo archivo con el nombre ejemplo23.c y le agregaremos el siguiente codigo:
ejemplo23.c
#include <stdio.h>
void saludar(const char c[])
{
printf("Hola, %s\n", c);
}
int main()
{
char nombre[100];
printf("Introduce tu nombre:\n");
scanf("%s", nombre);
saludar(nombre);
return 0;
}
Primero hablaremos sobre el main, en este caso definiremos un array llamado nombre con un tamaño de 100, luego mostraremos un mensaje en pantalla para indicarle al usuario la accion a realizar y por medio de scanf recibiremos una cadena y la almacenaremos en el array anteriormente definido, por ultimo lo pasamos a la funcion saludar.
Esta funcion recibira el array y le asignara el tamaño en base a la cadena que le pasamos, dentro de la funcion devolveremos un mensaje saludando al nombre que pasamos, con todo esto comentado compilemos y veamos como es su salida:
Como pueden ver en el video funciono perfectamente dado que la funcion recibe una cadena y llega a procesarla, otra opcion valida que podemos utilizar es un apuntador, en este caso podemos reemplazar la funcion:
void saludar(const char c[])
{
printf("Hola, %s\n", c);
}
De la siguiente manera:
void saludar(const char* ap_cadena)
{
printf("Hola, %s\n", ap_cadena);
}
Lo que hicimos fue basicamente reemplazar por un apuntador, si reuerdan cuando hablamos de apuntadores y array en este post, dijimos que trabajaban de una forma similar y por lo tanto con apuntar a la direccion de memoria de la posicion 0 nos traera el resto de la informacion, ahora vamos a hacer algo especial y para ello vamos a tomar el codigo anterior y lo modifficaremos de la siguiente manera:
ejemplo23.c
#include <stdio.h>
#include <string.h>
void agrandar(const int tam, const char* a_cadena)
{
char nuevo[tam];
for(int i=0; i < tam; i++)
{
if (a_cadena[i] >= 97 && a_cadena[i] <= 122)
{
nuevo[i] = a_cadena[i] - 32;
} else {
nuevo[i] = a_cadena[i];
}
}
printf("%s\n", nuevo);
}
int main()
{
char nombre[100];
printf("Introduce tu nombre:\n");
scanf("%s", nombre);
agrandar(strlen(nombre), nombre);
return 0;
}
Hablemos del primer cambio, en este caso incorporamos una libreria para poder acceder a herrramientas que nos permitan manejar nuestras cadenas, esto es asi porque debemos utilizar una instruccion nueva en nuestro codigo, por otro lado quitamos la funcion saludar y la reemplazamos por la de agrandar que es similar a la vista en este post pero un poco mas compleja, aunque de esto hablaremos luego, sigamos con el main, en este caso es similar a lo explicado anteriormente con la diferencia que no llamamos a saludar sino a la nueva funcion y en ella pasaremos dos datos:
- El primero sera el total de caracteres ingressado en nombre por medio de strlen
- El segundo sera la variable nombre
La instruccion strlen nos devolvera siempre el total de caracteres que posee una cadena, sin el centinela, y por esta razon debimos incluir a esta nueva libreria, con todo esto comentado pasemos a la funcion.
La funcion como mencionamos recibira dos datos, el total de caracteres en la cadena y la cadena en si, devuelta la recibimos como apuntador y en este caso sera constante, despues definiremos una variable para almacenar una nueva cadena, en este caso el tamaño quedara definido por el valor pasado a la funcion (tam), despues por medio de un bucle for pasaremos por toda la cadena pasada y la asignaremos a la nueva variable, pero al igual que en este post tenemos un condicional donde verifica si el caracter esta dentro del rango de las minusculas, en caso de ser verdadero la asigna pero previamente le resta 32 para poder cambiarlo a mayuscula, en caso de no cumplirse puede ser por dos razones:
- Ya es una mayuscula
- No es una letra
En cualquiera de los dos casos lo pasa directamente por medio del else, por ultimo una vez terminado el bucle procede a mostrar el resultado final de la funcion, con todo esto comentado pasemos a compilarlo y ver como trabaja mediante el siguiente video
Como podemos ver en el video no importa lo que le pasemos la funcion nos convertira cualquier caracter en minuscula a mayuscula y lo que no corresponda a una letra lo ignorara y asignara directamente, lo mismo si esta en mayuscula, para ir finalizando sobre la libreria string.h hablaremos en otro post mas en profundidad.
En resumen, hoy hemos visto como pasar una cadena a una funcion como argumento, las distintas posibilidades disponibles, primero vimos un ejemplo simple para verlo en accion, luego vimos otro ejemplo donde implementamos una libreria para manejar las cadenas, y hemos repasado una funcion que vimos en este post pero en lugar de manejar caracteres lo adaptamos a cadenas, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
