insertar una cadena dentro de otra cadena ---- string.h---- "C" (no c++)?

como meter una cadena dentro de otra cadena de caracteres?

como eliminar una porcion de una cadena de caracteres ?

por fa ayudeme y expliquenme

en en c no c++

(no uso apuntadores)

Update:

cuando hablo de insertar una cadena dentro de otra quiero decir

cad1= "hoy es un dia bonito"

cad2= "extraño"

entonces debe dar

cad3="hoy es un EXTRAÑO dia bonito"

--

cuando hablo de elimiar parte de una cadena

quero decir:

cad1= "hoy es un dia bonito"

cad2= "es"

entonces debe dar

cad3="hoy un dia bonito"

Comments

  • Hola !

    Lamentablmente no existe una función específica para cada problema que presentas.

    Puedes utilizar las funciones de la librería string.h para desarrollar de forma sencilla, sin llegar hacerlo de manera "hard core" Esto implica el manejo de aritmética de punteros,. pero si es obligatorio NO utilizar punteros, tendrás que hacerlo de la forma ruda.

    Por lo pronto te auxilio con la eliminación de una cadena dentro de otra, porque para la inserción, la respuesta que te han proporcionado con anterioridad te puede ser útil.

    - Algoritmo (Hard core)

    >>

    char frase[100] = "Te visito una vez mas, sin remordimiento";

    char resultado[100] = "";

    const char subcadena[6] = " mas";

    int i = 0;

    int j = 0;

    int k = 0;

    int longitud = 0;

    longitud = strlen(subcadena) - 1;

    while(frase[i] && j != longitud)

    {

    if(frase[i] == subcadena[j]) j++;

    else j = 0;

    i++;

    }

    i -=longitud;

    j = 0;

    while(frase[j])

    {

    if(j == i) j+= longitud + 1;

    resultado[k++] = frase[j++];

    }

    printf("%s\n ", resultado);

    <<

    Explicación breve

    ** Supon que tienes "Hola mundo" y quieres eliminar mundo. **

    - Buscas la primera aparición de "mundo" dentro de "Hola mundo"

    Básicamente el algoritmo que utilize hace lo siguiente, buscas el caracter 'm' de "mundo" dentro de "Hola mundo" Si el caracter se encuentra, verifico que el siguiente sea el caracter 'u' y asi sucesivamente. En caso de no encontrarse un caracter en particular de "mundo", se reinicia la busqueda , empezando por el primer caracter, siendo 'm'

    - Localizado el índice principal de "mundo", siendo en este ejemplo el índice 5, se realiza una copia de cadenas, sin contar los caracteres 5,6,7,8,9 ("mundo") de "Hola mundo"

    Es decir, copias 'h', 'o', 'l', 'a' , ' ' a la nueva cadena, pero como la siguiente posición es el índice <<5>> donde empieza la palabra que se desea eliminar, solo te lo brincas sumandole la longitud de la cadena "mundo" Por lo tanto omites esa parte de la cadena y copias el resto sin ningún problema.

    -

    Aunque es más sencillo utilizando punteros, te adjunto unos ejemplos.

    >>

    void insertar_substring( char * result, const char * string, const char * substring, int index)

    {

    strncpy(result, string, index);

    strcat(result, substring);

    strcat(result, (string + index));

    }

    void borrar_substring( char * result, const char * string, char * substring )

    {

    int index = 0;

    char * search = strstr(string, substring);

    if(search != NULL)

    {

    index = search - string-1;

    strncpy(result, string, index);

    strcat(result, string + index + 1 + strlen(substring));

    }

    }

    <<

    Ejemplo en tu main

    char x[100] = "";

    char y[100] = "";

    const char * hola = "Hola mundo aqui es";

    insertar_substring(x, hola, "!", 4);

    borrar_substring(y, hola, "mundo");

    printf("%s\n%s\n", x,y);

    >>

    -

    * Notas Posiblemente puedan mejorarse, estaba un poco cansado cuando los realize, pero independientemente de todo y de que forma elijas hacerlos te servirán.

    Cualquier duda nos comentas.

  • Concatenar cadenas:

    Usando función predefinida (string.h):

    strcat(cadena1, cadena2)

    Creando tu "propio" metodo:

    k=0;

    while(cadena1[k]!=0)

    k++;

    i=0;

    while(cadena2[i]!=0)

    cadena1[k++]=cadena2[i++];

    cadena1[k]=0;

    --------

    Bueno, si no especificas lo que entiendes por insertar (aún no has especificado correctamente). Pero asumiré:

    Lo anterior tambien funcionará para tu nueva duda, sólo hay que indicar un índice de la cadena inicial. Veamos con una función:

    char * insertar_medio(char cadena1[], char cadena2[], int donde)

    {

    char nueva_cadena[200];

    int i=0;

    while(i<donde)

    nueva_cadena[i]=cadena1[i++];

    int k=donde;

    i=0;

    while(cadena2[i]!=0)

    nueva_cadena[k++]=cadena2[i++];

    i=donde;

    while(cadena[i]!=0)

    nueva_cadena[k++]=cadena1[i++];

    nueva_cadena[k]=0;

    return nueva_cadena;

    }

    La función te devolverá la unión de las dos cadenas, con la segunda insertada en la primera. De las validaciones tendrás que encargarte fuera de la función.

  • dame unos dias!

Sign In or Register to comment.