2 votos

Como eliminar espacios vacios en un char array en C?

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

2voto

aFrost Puntos 315

Igual esto te sirve:

char array[10];
char temp[10];
array = " /home";

for (int i = 0; i < sizeof(array); i++) {
    if (array[i] != ' ') {
        temp[i] = source[i];
    }
}

2voto

JH Puntos 265

Debe existir forma de hacerlo usando sólo las funciones de manipulación de cadenas de C, pero igual te dejo una función de cosecha propia. El código a continuación modifica el array mismo, así no hay que estar creando cosas con malloc que después la gente se olvida de borrar.

Nota, que como se escribe el resultado en la variable pasada como parámetro, se debe tener cuidado de lo siguiente. Inicializar el string así:

char str [] = "   HOL  A   ";

Funcionará porque str es un nuevo array, modificable, el cual copia el contenido de la constante " HOL A ". Pero inicializar str de esta otra manera:

char* str = "   HOL  A   ";

Producirá una violación de segmento ya que str apunta a memoria no modificable. Nada más tener en cuenta este detalle. Igual prefiero escribir en str que retornar un nuevo array inicializado con malloc y dejar aviso de esta limitación.

void removeSpacesInPlace (char* str)
{
    size_t str_len = strlen(str); // para tener strlen se debe incluir <string.h>
    char result [str_len];
    size_t p = 0;

    size_t i = 0;
    for (i = 0; i < str_len; ++i)
    {
        if (str[i] != ' ')
        {
            // result necesita su propio posicionador o iremos dejando agujeros
            result[p] = str[i];

            // Sólo avanzamos la posición p si se realiza la inserción
            p++;
        }
    }

    // funciones como printf buscan el caracter 0
    // aunque dejamos str con el mismo tamaño en memoria, ponemos la
    // marca de fin de la cadena en donde corresponde
    if (p < str_len)
        str[p] = '\0';

    // Reescribimos str con el contenido de result
    for (i = 0; i < p; ++i)
    {
        str[i] = result[i];
    }
}

1voto

Magus Man Puntos 30

Recorre el array con un while, buscando el caracter terminador. Y luego te preguntas si esa posicion del array contiene ' ' que representa a un espacio.de ahi vas tirando todo el array "para atras" llenando los espacios.

Saludos!

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X