| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
danfg
Registrado: 30 Ene 2014 Mensajes: 2
| Publicado: 30/01/2014 7:34 am | | | Título: Ayuda! Función que elimina símbolos de un string. |
| Hola, necesito hacer una función en la que se pasa como argumento un string (como const chat *) y necesito comprobar que ese string no sea NULL, que ese string se copie en otro string de tupo chat* para que se pueda modificar, y que por ultimo sustituya los símbolos de la cadena por espacios. Tengo el código pero necesito saber si esta bien. ¿Alguien que me pueda ayudar? Estoy desesperado.
extern char * eliminate_chars(char * dst, const char * src, const char * seps, size_t max) { int i;
//Comprobamos que los datos que no pasan como argumentos de la funcion son correctos if (src == NULL){ printf ("Error\n"); return 0; } if (dst == NULL){ printf ("Error\n"); return 0; }
//Ahora copiamos src (que es un const char que no se puede modificar) a dst if (src && dst){ while (*src){ *dst++=*src++; } }
//Por ultimo, recorremos el string dst y sustituimos los simbolos por espacios for (i=0; i<DIM; i++){ if ((dst[i] < 65 || dst[i] > 90) && (dst[i] < 97 || dst[i] > 122)){ dst[i]= 32; } }
} |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7520 Ubicación: Mexico
| Publicado: 30/01/2014 8:36 am | | | Título: |
| Hay algunos errores y deficiencias.
Lo primero a eliminar es el uso de "extern" en la definición de la función, ello porque su uso no es necesario (tendrá el mismo efecto con o sin ella). También hay que eliminar esta sentencia de comprobación:
Porque si se llego a ese punto en la función ambos valores no pueden ser igual a NULL (si lo fueran la función habría terminado con alguna de las comprobaciones anteriores).
El primer error importante es utilizar el parámetro "dst" sin resguardarlo (por ello ya no puedes acceder al bloque original), lo mas sencillo aquí es el uso de una variable como indice. El segundo es no agregar el terminador '\0' al final de la cadena y el tercero es procesar en el ultimo bucle "DIM" caracteres cuando solo debes procesar los caracteres hasta llegar al '\0'.
La función con los cambios:
| Código: | char *eliminate_chars(char *dst, const char *src, const char *seps, size_t max) { int i; if (src == NULL || dst == NULL) puts("Error"); else { for (i = 0; (dst[i] = src[i]) != '\0'; i++) ; for (i = 0; dst[i] != '\0'; i++) if ((dst[i] < 'A' || dst[i] > 'Z') && (dst[i] < 'a' || dst[i] > 'z')) dst[i] = ' '; }
return dst; } |
Por ultimo bien tu descripción del enunciado esta incompleta o la plantilla que te dieron tiene un error ya que los parámetros "seps" y "max" no los describes como tampoco los utilizas en el programa.
Un saludo _________________ 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 |
| | Volver arriba | |  | danfg
Registrado: 30 Ene 2014 Mensajes: 2
| Publicado: 30/01/2014 9:05 am | | | Título: Gracias |
| | Perfecto por la ayuda. Muchisimas gracias |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |