Hoy veremos un ejercicio de trabajo con cadenas o strings en C. Se trata de ver una función para insertar una cadena dentro de otra cadena, en cualquier posición.

Es decir, colocar una substring en una string de C. Como sabemos, las cadenas en C son un dolor de cabeza.

Durante la madrugada estuve trabajando en una función que hace exactamente eso y la vengo a compartir.

Algoritmo para insertar cadena en subcadena

Como sabemos, las cadenas son complejas de manejar en C. Por lo tanto la función que he creado requiere que definamos una máxima longitud de cadena.

Comenzamos definiendo el encabezado, que recibe la cadena original (en donde se va a insertar la otra cadena), la cadena que se inserta y la posición en la que se inserta.

void insertarSubcadena(char *original, char *subcadena, int indice);

Con esta función vamos a poder insertar una cadena al inicio, al final o en el centro, haciendo la cadena más grande como se debe. Por cierto, la función modifica a la cadena original.

Después de eso definimos el inicio de la cadena en una cadena vacía y copiamos a inicio la primer parte de la cadena, desde el inicio hasta la posición:

// El inicio es copiar la original N caracteres definidos por posición
char inicio[MAXIMA_LONGITUD] = "";
strncpy(inicio, original, indice);

Ahora definimos el final, que es copiar desde el índice en donde se inserta hasta el final:

char fin[MAXIMA_LONGITUD] = "";
strncpy(fin, original + indice, strlen(original) - indice);

En este momento ya tenemos separados el inicio y final de la cadena, ahora falta insertar la subcadena que irá “en el centro”:

// Agregar la subcadena al inicio
strcat(inicio, subcadena);

Ahora ya tenemos el inicio y la subcadena, falta agregar el final:

// Y agregar el fin a la anterior cadena, es decir, al inicio
strcat(inicio, fin);

Finalmente copiamos el inicio (que tiene en este momento toda la cadena lista) a la cadena original:

// Copiarla dentro de la cadena recibida
strcpy(original, inicio);

Función insertar cadena en otra cadena usando C

Ahora la función completa queda así:

#define MAXIMA_LONGITUD 100

void insertarSubcadena(char *original, char *subcadena, int indice) {
    // El inicio es copiar la original N caracteres definidos por posición
    char inicio[MAXIMA_LONGITUD] = "";
    strncpy(inicio, original, indice);
    // El final es copiar desde la posición N caracteres definidos por los sobrantes
    char fin[MAXIMA_LONGITUD] = "";
    strncpy(fin, original + indice, strlen(original) - indice);
    // Agregar la subcadena al inicio
    strcat(inicio, subcadena);
    // Y agregar el fin a la anterior cadena, es decir, al inicio
    strcat(inicio, fin);
    // Copiarla dentro de la cadena recibida
    strcpy(original, inicio);
}

Como lo dije, modificará la cadena original.

Probando función

Podemos probar la función con el siguiente código dentro del método main:

int main() {
    // Vamos a formar "Luis Cabrera"
    char nombre[] = "us";
    printf("Antes: %s\n", nombre);
    // Insertamos la L al inicio
    insertarSubcadena(nombre, "L", 0);
    printf("Después: %s\n", nombre);
    // La i en penúltimo lugar
    insertarSubcadena(nombre, "i", 2);
    printf("Después: %s\n", nombre);
    // Ahora " Cabrera" al final
    insertarSubcadena(nombre, " Cabrera", 4);
    printf("Después: %s\n", nombre);
    return EXIT_SUCCESS;
}

Y el código completo quedaría así:

/*
  ____          _____               _ _           _       
 |  _ \        |  __ \             (_) |         | |      
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___ 
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |        
        |___/                               |___/         
    
    Blog:       https://parzibyte.me/blog
    Ayuda:      https://parzibyte.me/blog/contrataciones-ayuda/
    Contacto:   https://parzibyte.me/blog/contacto/
    
    Copyright (c) 2020 Luis Cabrera Benito
    Licenciado bajo la licencia MIT
    
    El texto de arriba debe ser incluido en cualquier redistribución
 * */#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXIMA_LONGITUD 100

void insertarSubcadena(char *original, char *subcadena, int indice) {
    // El inicio es copiar la original N caracteres definidos por posición
    char inicio[MAXIMA_LONGITUD] = "";
    strncpy(inicio, original, indice);
    // El final es copiar desde la posición N caracteres definidos por los sobrantes
    char fin[MAXIMA_LONGITUD] = "";
    strncpy(fin, original + indice, strlen(original) - indice);
    // Agregar la subcadena al inicio
    strcat(inicio, subcadena);
    // Y agregar el fin a la anterior cadena, es decir, al inicio
    strcat(inicio, fin);
    // Copiarla dentro de la cadena recibida
    strcpy(original, inicio);
}

int main() {
    // Vamos a formar "Luis Cabrera"
    char nombre[] = "us";
    printf("Antes: %s\n", nombre);
    // Insertamos la L al inicio
    insertarSubcadena(nombre, "L", 0);
    printf("Después: %s\n", nombre);
    // La i en penúltimo lugar
    insertarSubcadena(nombre, "i", 2);
    printf("Después: %s\n", nombre);
    // Ahora " Cabrera" al final
    insertarSubcadena(nombre, " Cabrera", 4);
    printf("Después: %s\n", nombre);
    return EXIT_SUCCESS;
}

En mi caso todo funciona de maravilla:

Insertar cadena en otra cadena usando C

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

Creador de credenciales web – Aplicación gratuita

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

17 horas 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…

1 semana 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…

1 semana 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…

1 semana hace

Errores de Comlink y algunas soluciones

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

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.