Function to remove spaces from string/char array in C

arrays, c, string

Solution

After removing the white spaces from the `input` you have not terminated it with nul-terminator (`\0`) because the new length is less than or equal to the original string.

Just nul-terminate it at the of end your for loop:

char* deblank(char* input)                                         
{
    int i,j;
    char *output=input;
    for (i = 0, j = 0; i<strlen(input); i++,j++)          
    {
        if (input[i]!=' ')                           
            output[j]=input[i];                     
        else
            j--;                                     
    }
    output[j]=0;
    return output;
}

Problem

The question asked here is very similar to what I am having a problem with. The difference is that I must pass an argument to a function that removes the spaces and returns the resulting string/char array. I got the code working to remove the spaces but for some reason I am left with trailing characters left over from the original array. I even tried strncpy but I was having lots of errors. Here is what I have so far: ``` #include <stdio.h> #include <string.h> #define STRINGMAX 1000 /*Maximium input size is 1000 characters*/ char* deblank(char* input) /* deblank accepts a char[] argument and returns a char[] */ { char *output=input; for (int i = 0, j = 0; i<strlen(input); i++,j++) /* Evaluate each character in the input */ { if (input[i]!=' ') /* If the character is not a space */ output[j]=input[i]; /* Copy that character to the output char[] */ else j--; /* If it is a space then do not increment the output index (j), the next non-space will be entered at the current index */ } return output; /* Return output char[]. Should have no spaces*/ } int main(void) { char input[STRINGMAX]; char terminate[] = "END\n"; /* Sentinal value to exit program */ printf("STRING DE-BLANKER\n"); printf("Please enter a string up to 1000 characters.\n> "); fgets(input, STRINGMAX, stdin); /* Read up to 1000 characters from stdin */ while (strcmp(input, terminate) != 0) /* Check for que to exit! */ { input[strlen(input) - 1] = '\0'; printf("You typed: \"%s\"\n",input); /* Prints the original input */ printf("Your new string is: %s\n", deblank(input)); /* Prints the output from deblank(input) should have no spaces... DE-BLANKED!!! */ printf("Please enter a string up to 1000 characters.\n> "); fgets(input, STRINGMAX, stdin); /* Read up to another 1000 characters from stdin... will continue until 'END' is entered*/ } } ```

Original source

Related problems