Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: saintmauricioxd en 9 Octubre 2015, 08:05 am



Título: Como puedo eliminar espacios vacios en un char array?
Publicado por: saintmauricioxd en 9 Octubre 2015, 08:05 am
Hola comunidad! estoy programando en C y estoy teniendo algunos problemas, soy nuevo en este lenguaje y necesito hacer lo siguiente, tengo un char array declarado asi:
Código:
char array[10];
array = " /home";
(esto no se si lo estoy escribiendo bien, pero basicamente es esa cadena que tiene mi array) y porsupuesto agregue al final '\0', ahora lo que necesito es eliminar esos espacios vacios que en este caso son 2, esto por los caracteres especiales que me genera el script CGI cuando agrego frontslashes (/) tuve que reemplazar esos valores vacios por espacios en blanco, y ahora estoy teniendo problemas al procesar esa cadena por esos espacios en blanco, como puedo hacer un "trim" como en java para eliminar espacios vacios de mi array??


Título: Re: Como puedo eliminar espacios vacios en un char array?
Publicado por: daryo en 10 Octubre 2015, 19:36 pm
se me ocurre hacer un trim algo improvisado
Código
  1. #include <stdio.h>
  2.  
  3. char * trim(char * n);
  4. int main()
  5. {
  6.    char x[]="    soy un trim     ";
  7.    char * parametro=&x[0];
  8.    char * resultado=trim(parametro);
  9.  
  10.    printf(":%s:",resultado);
  11.    return 0;
  12.  
  13. }
  14.  
  15. char * trim(char * n)
  16. {
  17.    static char a[100];
  18.    char * salida=&a[0];
  19.    short primero=1,ultimo=1;
  20.    short tamano=0,espacios=0,contador=0;
  21.    //borro los espacios del comienzo de la cadena y cuento cuantos caracteres tiene
  22.    for(int z=0;n[z]!='\0';z++){
  23.        if(primero==1 && n[z]!=' '){
  24.            a[contador]=n[z];
  25.            primero=0;
  26.            espacios=tamano;
  27.            contador++;
  28.        }
  29.        else
  30.        {
  31.            if(primero==0){
  32.            a[contador]=n[z];
  33.            contador++;
  34.            }
  35.        }
  36.    tamano++;
  37.    }
  38.    //borro los espacios de la cadena , poniendo un caracter de final  \0 antes de que inicien los espacios
  39.    for(int y=tamano-1;y>=0;y--){
  40.        if(n[y]!=' ' && ultimo==1)
  41.        {
  42.           ultimo=0;
  43.           a[(y+1)-espacios]='\0';
  44.           tamano=-1;
  45.        }
  46.    }
  47. return salida;
  48. }
  49.  


Título: Re: Como puedo eliminar espacios vacios en un char array?
Publicado por: ivancea96 en 10 Octubre 2015, 22:59 pm
Demasiadas variables :/

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int trim(char* str, char c){
  5. int len = strlen(str);
  6. int i,j=0;
  7.  
  8. for(i=0; i<len && str[i]==c; i++);
  9. for(j=0; ; j++){
  10. str[j] = str[j+i];
  11. if(str[j+i]=='\0')
  12. break;
  13. }
  14. len = j;
  15. if(len>0){
  16. for(i=len-1; i>=0 && str[i]==c; i--, len--);
  17. str[i+1] = '\0';
  18. }
  19. return len;
  20. }
  21.  
  22. int main(){
  23. char str[] = "    a b c ";
  24. printf("Cadena: '%s'\n", str);
  25. printf("Nueva longitud: %i\n", trim(str, ' '));
  26. printf("Nueva cadena: '%s'\n", str);
  27. }


Título: Re: Como puedo eliminar espacios vacios en un char array?
Publicado por: do-while en 11 Octubre 2015, 00:04 am
Demasiadas lineas de código :/

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. char* trim(char *s, char c)
  5. {
  6.    int i;
  7.  
  8.    for(i = strlen(s) - 1 ; i >= 0 && s[i] == c ; i--);
  9.    s[++i] = '\0';
  10.  
  11.    for(i = 0 ; s[i] && s[i] == c ; i++);
  12.  
  13.    if(i)
  14.        memmove(s , s + i , strlen(s) - i + 1);
  15.  
  16.    return s;
  17. }
  18.  


Título: Re: Como puedo eliminar espacios vacios en un char array?
Publicado por: ivancea96 en 11 Octubre 2015, 11:20 am
saintmauricioxd , has venido buscando ayuda sobre como hacer un trim, y te irás con el trim más eficiente y corto jamás hecho en todo elhacker.net.
Empieza la caza