Como puedo eliminar espacios vacios en un char array?

Iniciado por saintmauricioxd, 9 Octubre 2015, 08:05 AM

0 Miembros y 1 Visitante están viendo este tema.

saintmauricioxd

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:
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??

daryo

#1
se me ocurre hacer un trim algo improvisado

#include <stdio.h>

char * trim(char * n);
int main()
{
    char x[]="    soy un trim     ";
    char * parametro=&x[0];
    char * resultado=trim(parametro);

    printf(":%s:",resultado);
    return 0;

}

char * trim(char * n)
{
    static char a[100];
    char * salida=&a[0];
    short primero=1,ultimo=1;
    short tamano=0,espacios=0,contador=0;
    //borro los espacios del comienzo de la cadena y cuento cuantos caracteres tiene
    for(int z=0;n[z]!='\0';z++){
        if(primero==1 && n[z]!=' '){
            a[contador]=n[z];
            primero=0;
            espacios=tamano;
            contador++;
        }
        else
        {
            if(primero==0){
            a[contador]=n[z];
            contador++;
            }
        }
    tamano++;
    }
    //borro los espacios de la cadena , poniendo un caracter de final  \0 antes de que inicien los espacios
    for(int y=tamano-1;y>=0;y--){
        if(n[y]!=' ' && ultimo==1)
        {
           ultimo=0;
           a[(y+1)-espacios]='\0';
           tamano=-1;
        }
    }
return salida;
}
buenas

ivancea96

Demasiadas variables :/

#include <stdio.h>
#include <string.h>

int trim(char* str, char c){
int len = strlen(str);
int i,j=0;

for(i=0; i<len && str[i]==c; i++);
for(j=0; ; j++){
str[j] = str[j+i];
if(str[j+i]=='\0')
break;
}
len = j;
if(len>0){
for(i=len-1; i>=0 && str[i]==c; i--, len--);
str[i+1] = '\0';
}
return len;
}

int main(){
char str[] = "    a b c ";
printf("Cadena: '%s'\n", str);
printf("Nueva longitud: %i\n", trim(str, ' '));
printf("Nueva cadena: '%s'\n", str);
}

do-while

Demasiadas lineas de código :/


#include <stdio.h>
#include <string.h>

char* trim(char *s, char c)
{
    int i;

    for(i = strlen(s) - 1 ; i >= 0 && s[i] == c ; i--);
    s[++i] = '\0';

    for(i = 0 ; s[i] && s[i] == c ; i++);

    if(i)
        memmove(s , s + i , strlen(s) - i + 1);

    return s;
}
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

ivancea96

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