elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Equivalente de funcion REPLACE de vb en C ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Equivalente de funcion REPLACE de vb en C ?  (Leído 3,742 veces)
User

Desconectado Desconectado

Mensajes: 31


Ver Perfil
Equivalente de funcion REPLACE de vb en C ?
« en: 17 Julio 2012, 21:47 pm »

Hola nuevamente haber si me orientan, deseo encontrar una fucion en C similar a REPLACE
de VB 6

Ejemplo : strNewDate = Replace("08/31/2001", "/", "-")

Estuve averiguando en funciones en C y entontre que para hacer eso debo usar 2 funciones

strstr <---- Para ubicar la palabra a remplazar.
strncpy <--- Para especificar la palabra y nro de caracteres a remplazar.

Quedando el code asi :





Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main ()
  5. {
  6.  char str[] ="Espero les vaya muy bien";
  7.  char * pch;
  8.  pch = strstr (str,"vaya");
  9.  strncpy (pch,"haga",4);
  10.  printf ("%s\n", str);
  11.  return 0;
  12. }

Quedando "Espero les haga muy bien"


Habra una manera mas practica como REPLACE en VB ? ... gracias por su apoyo.


En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Equivalente de funcion REPLACE de vb en C ?
« Respuesta #1 en: 17 Julio 2012, 21:52 pm »

Me parece que no hay ninguna función que sea igual a replace de VB... De todas formas he buscado aquí y no he encontrado lo que buscas... Así que supongo que la forma más práctica es como lo has hecho.

Saludos!


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Equivalente de funcion REPLACE de vb en C ?
« Respuesta #2 en: 17 Julio 2012, 21:59 pm »

http://foro.elhacker.net/programacion_cc/consulta_programa_para_parsear_csv-t365491.0.html;msg1760918#msg1760918

Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. char* replace(const char *str, const char *find, const char *rep)
  7. { // Reemplaza UNO  A LA VEZ...
  8.    char *ret = NULL;
  9.    size_t strOln;
  10.    size_t strFln;
  11.    size_t strRln;
  12.    const char *end[2];
  13.    size_t sizeL;
  14.    size_t sizeR;
  15.  
  16.  
  17.    if (!str) return NULL;
  18.  
  19.    strOln = strlen(str);
  20.  
  21.    if (!find || (end[0] = strstr(str, find)) == NULL) {
  22.        ret = (char*)malloc(strOln + 1);
  23.        memcpy(ret, str, strOln + 1);
  24.        return ret;
  25.    }
  26.  
  27.    strRln = strlen(rep);
  28.    strFln = strlen(find);
  29.  
  30.    end[1] = end[0] + strFln;
  31.  
  32.    sizeL = end[0] - str;
  33.    sizeR = (str + strOln) - end[1];
  34.  
  35.    ret = (char*)malloc(sizeL + strRln + sizeR + 1);
  36.  
  37.    memcpy(ret, str, sizeL);
  38.    memcpy((ret + sizeL), rep, strRln);
  39.    memcpy((ret + sizeL + strRln), end[1], sizeR);
  40.  
  41.    ret[sizeL + strRln + sizeR] = '\0';
  42.  
  43.    return ret;
  44. }
  45.  
  46. int main() {
  47.    const char MSG[] = "% &";
  48.    char* ret1;
  49.    char* ret2;
  50.  
  51.    ret1 = replace(MSG, "%", "Hola");
  52.    ret2 = replace(ret1, "&", "Mundo");
  53.  
  54.    puts(ret1);
  55.    puts(ret2);
  56.  
  57.    free(ret1);
  58.    free(ret2);
  59.  
  60.    getchar();
  61.  
  62.    return 0;
  63. }
  64.  
  65.  

Dulces Lunas¡.
« Última modificación: 18 Julio 2012, 23:01 pm por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Equivalente de funcion REPLACE de vb en C ?
« Respuesta #3 en: 18 Julio 2012, 19:31 pm »

En relacion al programa de BlackZeroX (Astaroth):
Código
  1. end[1] = (char*)((size_t)end[0] + strFln);
  2.  
  3. /* ... */
  4.  
  5. memcpy((void*)((int)ret + sizeL + strRln), end[1], sizeR);
Esas conversiones no son necesarias. La primera porque el puntero resultante (sin conversiones) es del tipo apropiado y la segunda porque un puntero de cualquier tipo puede pasarse sin problemas a una función que espere uno de tipo "void *" (la única excepción son funciones con un tipo variable de argumentos como "printf" pero eso ya es otra historia).


Se puede crear una función que remplace las instancias de una subcadena por otra utilizando "strstr", "sprintf" y aritmética de punteros. Por ejemplo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char *remplazar(char const *cad, char const *sub, char const *rem);
  6.  
  7. int main(void)
  8. {
  9.   char *p = " xxxxx\n xxxxx\n xxxxx\n";
  10.   char *q;
  11.  
  12.   printf("%s----\n", p);
  13.   q = remplazar(p, "xxxxx", "Hello, world");
  14.   printf("%s", q);
  15.   free(q);
  16.  
  17.   return EXIT_SUCCESS;
  18. }
  19.  
  20. char *remplazar(char const *cad, char const *sub, char const *rem)
  21. {
  22.   char *nueva;
  23.   char const *p;
  24.   char *q;
  25.  
  26.   size_t nc_cad = strlen(cad);
  27.   size_t nc_sub = strlen(sub);
  28.   size_t nc_rem = strlen(rem);
  29.  
  30.   if (nc_rem > nc_sub)
  31.      nueva = malloc((nc_cad / nc_sub + 1) * nc_rem);
  32.   else
  33.      nueva = malloc(nc_cad + 1);
  34.   if (nueva == NULL)
  35.      return NULL;
  36.  
  37.   q = nueva;
  38.   while ((p = strstr(cad, sub)) != NULL){
  39.      q += sprintf(q, "%.*s%s", (int) (p - cad), cad, rem);
  40.      cad = p + nc_sub;
  41.   }
  42.   q += sprintf(q, "%s", cad);
  43.  
  44.   if ((q = realloc(nueva, q - nueva + 1)) == NULL){
  45.      free(nueva);
  46.   }
  47.   return q;
  48. }

Un saludo
« Última modificación: 23 Julio 2012, 17:26 pm por rir3760 » En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Equivalente de funcion REPLACE de vb en C ?
« Respuesta #4 en: 18 Julio 2012, 23:01 pm »

@rir3760
Gracias por las aclaraciones ( estoy traumatizado con los casting de variables debido a que "siempre" me salen errores al asignarlos a una variable ).

--- Modifique mi código replace().

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
User

Desconectado Desconectado

Mensajes: 31


Ver Perfil
Re: Equivalente de funcion REPLACE de vb en C ?
« Respuesta #5 en: 25 Julio 2012, 01:07 am »

Hola a todos, muchas gracias por el ejemplo ... me ayudan mucho .. saludos !!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Consulta en SQL; Replace
Desarrollo Web
astinx 2 3,894 Último mensaje 2 Noviembre 2011, 02:02 am
por astinx
llamar funcion equivalente a shell desde window mobile
.NET (C#, VB.NET, ASP)
sysfactory 1 2,349 Último mensaje 18 Julio 2013, 06:14 am
por Eleкtro
Función equivalente a QueryFullProcessImageName para win XP
Programación C/C++
el_doctor 7 3,272 Último mensaje 1 Diciembre 2014, 18:52 pm
por Eternal Idol
Funcion equivalente en C
ASM
Kougami 2 2,761 Último mensaje 23 Mayo 2017, 21:59 pm
por Serapis
Escribir funcion equivalente en C
Programación C/C++
Kougami 8 3,041 Último mensaje 24 Mayo 2017, 21:28 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines