Lenguaje de programación C

C – Intercambiar elementos de arreglo de cadenas

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.

Mover elementos en arreglo de cadenas en C

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.

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.

Intercambiar elementos en array de strings en C

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);

Ejemplo completo

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Tramitar acta de nacimiento en línea de manera instantánea

En este post te quiero compartir mi experiencia tramitando un acta de nacimiento de México…

1 min hace

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esta web usa cookies.