Autor
|
Tema: Equivalente de funcion REPLACE de vb en C ? (Leído 3,742 veces)
|
User
Desconectado
Mensajes: 31
|
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 : #include <stdio.h> #include <string.h> int main () { char str[] ="Espero les vaya muy bien"; char * pch; return 0; }
Quedando "Espero les haga muy bien" Habra una manera mas practica como REPLACE en VB ? ... gracias por su apoyo.
|
|
|
En línea
|
|
|
|
DickGumshoe
|
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
Mensajes: 3.158
I'Love...!¡.
|
http://foro.elhacker.net/programacion_cc/consulta_programa_para_parsear_csv-t365491.0.html;msg1760918#msg1760918 #include <stdio.h> #include <stdlib.h> #include <string.h> char* replace(const char *str, const char *find, const char *rep) { // Reemplaza UNO A LA VEZ... char *ret = NULL; size_t strOln; size_t strFln; size_t strRln; const char *end[2]; size_t sizeL; size_t sizeR; if (!str) return NULL; if (!find || (end [0] = strstr(str , find )) == NULL ) { ret = (char*)malloc(strOln + 1); return ret; } end[1] = end[0] + strFln; sizeL = end[0] - str; sizeR = (str + strOln) - end[1]; ret = (char*)malloc(sizeL + strRln + sizeR + 1); memcpy((ret + sizeL ), rep , strRln ); memcpy((ret + sizeL + strRln ), end [1], sizeR ); ret[sizeL + strRln + sizeR] = '\0'; return ret; } int main() { const char MSG[] = "% &"; char* ret1; char* ret2; ret1 = replace(MSG, "%", "Hola"); ret2 = replace(ret1, "&", "Mundo"); return 0; }
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
Mensajes: 1.639
|
En relacion al programa de BlackZeroX (Astaroth): end[1] = (char*)((size_t)end[0] + strFln); /* ... */ 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: #include <stdio.h> #include <stdlib.h> #include <string.h> char *remplazar(char const *cad, char const *sub, char const *rem); int main(void) { char *p = " xxxxx\n xxxxx\n xxxxx\n"; char *q; q = remplazar(p, "xxxxx", "Hello, world"); return EXIT_SUCCESS; } char *remplazar(char const *cad, char const *sub, char const *rem) { char *nueva; char const *p; char *q; if (nc_rem > nc_sub) nueva = malloc((nc_cad / nc_sub + 1) * nc_rem ); else if (nueva == NULL) return NULL; q = nueva; while ((p = strstr(cad , sub )) != NULL ){ q += sprintf(q , "%.*s%s", (int) (p - cad ), cad , rem ); cad = p + nc_sub; } if ((q = realloc(nueva , q - nueva + 1)) == NULL ){ } return q; }
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
Mensajes: 3.158
I'Love...!¡.
|
@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
Mensajes: 31
|
Hola a todos, muchas gracias por el ejemplo ... me ayudan mucho .. saludos !!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Consulta en SQL; Replace
Desarrollo Web
|
astinx
|
2
|
3,894
|
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
|
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
|
1 Diciembre 2014, 18:52 pm
por Eternal Idol
|
|
|
Funcion equivalente en C
ASM
|
Kougami
|
2
|
2,761
|
23 Mayo 2017, 21:59 pm
por Serapis
|
|
|
Escribir funcion equivalente en C
Programación C/C++
|
Kougami
|
8
|
3,041
|
24 Mayo 2017, 21:28 pm
por Serapis
|
|