Monday, 7 November 2011

How can I remove the leading spaces from a string? in C programming

How can I remove the leading spaces from a string?

The C language does not provide a standard function that removes leading spaces from a string. It is easy,
however, to build your own function to do just this. Using the example from FAQ VI.2, you can easily construct a custom function that uses the rtrim() function in conjunction with the standard C library
function strrev() to remove the leading spaces from a string. Look at how this task is performed:

#include <stdio.h>
#include <string.h>
void main(void);
char* ltrim(char*);
char* rtrim(char*);
void main(void)
{
char* lead_str = “ This string has leading spaces in it.”;
/* Show the status of the string before calling the ltrim()
function. */
printf(“Before calling ltrim(), lead_str is ‘%s’\n”, lead_str);
printf(“and has a length of %d.\n”, strlen(lead_str));
/* Call the ltrim() function to remove the leading blanks. */
ltrim(lead_str);
/* Show the status of the string
after calling the ltrim() function. */
printf(“After calling ltrim(), lead_str is ‘%s’\n”, lead_str);
printf(“and has a length of %d.\n”, strlen(lead_str));
}
/* The ltrim() function removes leading spaces from a string. */
char* ltrim(char* str)
{
strrev(str); /* Call strrev() to reverse the string. */
rtrim(str); /* Call rtrim() to remove the “trailing” spaces. */
strrev(str); /* Restore the string’s original order. */
return str; /* Return a pointer to the string. */
}
/* The rtrim() function removes trailing spaces from a string. */
char* rtrim(char* str)
{
int n = strlen(str) - 1; /* Start at the character BEFORE
the null character (\0). */
while (n>0) /* Make sure we don’t go out of bounds... */
{
if (*(str+n) != ‘ ‘) /* If we find a nonspace character: */
{
*(str+n+1) = ‘\0’; /* Put the null character at one
character past our current
position. */
break; /* Break out of the loop. */
}
else /* Otherwise, keep moving backward in the string. */
n--;
}
return str; /* Return a pointer to the string. */
}

Notice that the ltrim() function performs the following tasks: First, it calls the standard C library function strrev(), which reverses the string that is passed to it. This action puts the original string in reverse order, thereby creating “trailing spaces” rather than leading spaces. Now, the rtrim() function (that was created
in the example from FAQ VI.2) is used to remove the “trailing spaces” from the string. After this task is done, the strrev() function is called again to “reverse” the string, thereby putting it back in its original order. See
FAQ VI.2 for an explanation of the rtrim() function.

Cross Reference:

VI.2: How can I remove the trailing spaces from a string?
VI.5: How can I pad a string to a known length?

No comments:

Post a Comment