En este post de programación en C, también conocido como ANSI C vamos a ver cómo intercambiar los elementos de un arreglo de cadenas o strings, es decir, modificar los elementos de un arreglo de strings a través de su índice.
En otras palabras, hacer un intercambio como:
temporal = arreglo[0]
arreglo[0] = arreglo[1]
arreglo[1] = temporal
Aunque suena fácil, recordemos que en C no podemos hacer eso con los arreglos de cadenas, y debemos usar otras funciones que trabajan con apuntadores.
Primero te invito a que veas una introducción a los arreglos de cadenas en C, pues recordemos que el tipo de dato string no existe, y debemos usar un arreglo de caracteres. Así que técnicamente un arreglo de cadenas en C es un arreglo de arreglos.
Por lo tanto no podemos mover libremente los elementos, pero sí podemos usar las funciones para copiar elementos de la memoria usando la función memcpy
.
Esta función debe servir para varias cosas, pero para nuestro ejemplo solo necesitamos saber que la sintaxis es:
memcpy(destino, fuente, tamaño);
En donde destino es el lugar de memoria a donde se copia la cadena, fuente es la cadena de origen y tamaño es el tamaño de cadena.
Por lo tanto podemos hacer lo siguiente para un intercambio. Es como hacerlo con índices pero ahora usando memcpy.
Recuerda que en este caso necesitamos indicar la longitud máxima de la cadena en tiempo de compilación, y usamos también esta medida para indicar el tamaño de la cadena que se copia.
char temporal[MAXIMA_LONGITUD_CADENA];
memcpy(temporal, palabras[0], MAXIMA_LONGITUD_CADENA);
memcpy(palabras[0], palabras[1], MAXIMA_LONGITUD_CADENA);
memcpy(palabras[1], temporal, MAXIMA_LONGITUD_CADENA);
Ahora veamos un ejemplo ejecutable y completo. En este caso tenemos un arreglo de cadenas en ANSI C, vamos a intercambiarlas. Para ello primero imprimimos el arreglo original, lo modificamos y luego lo volvemos a imprimir.
/*
https://parzibyte.me/blog
*/#include <stdio.h>
#include <string.h>
// Debe ser de la máxima + 1. Por ejemplo, si la máxima es 4, defínela como 5
#define MAXIMA_LONGITUD_CADENA 1000
int main()
{
// Arreglo de cadenas
char palabras[][MAXIMA_LONGITUD_CADENA] = {
"Maria",
"Luis",
};
int longitud = sizeof(palabras) / sizeof(palabras[0]);
printf("Antes:\n");
int i;
for (i = 0; i < longitud; i++)
{
printf("%s\n", palabras[i]);
}
char temporal[MAXIMA_LONGITUD_CADENA];
memcpy(temporal, palabras[0], MAXIMA_LONGITUD_CADENA);
memcpy(palabras[0], palabras[1], MAXIMA_LONGITUD_CADENA);
memcpy(palabras[1], temporal, MAXIMA_LONGITUD_CADENA);
printf("Despues:\n");
for (i = 0; i < longitud; i++)
{
printf("%s\n", palabras[i]);
}
return 0;
}
El intercambio ocurre en la línea 24 hasta la línea 27, que es en donde se hace el movimiento de elementos entre el arreglo de tipo string.
También puedes leer más sobre C en mi blog.
En este post te quiero compartir un código de C++ para listar y cancelar trabajos…
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Esta semana estuve recreando la API del plugin para impresoras térmicas en Android (HTTP a…
Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
Esta web usa cookies.