Search code examples
cstringchar

Trying to remove all numbers from a string in C


I'm trying to take all of the numbers out of a string (char*)...

Here's what I have right now:

    // Take numbers out of username if they exist - don't care about these
    char * newStr;
    strtoul(user, &newStr, 10);
    user = newStr;

My understanding is that strtoul is supposed to convert a string to an unsigned long. The characters that are not numbers are put into the passed in pointer (the 2nd arg). When i reassign user to newStr and print it, the string remains unchanged. Why is this? Does anyone know of a better method?

From the documentation example:

#include <stdio.h>
#include <stdlib.h>

int main()
{
char str[30] = "2030300 This is test";
char *ptr;
long ret;

ret = strtoul(str, &ptr, 10);
printf("The number(unsigned long integer) is %lu\n", ret);
printf("String part is |%s|", ptr);

return(0);
}

Let us compile and run the above program, this will produce the following result:

The number(unsigned long integer) is 2030300
String part is | This is test|

Solution

  • char* RemoveDigits(char* input)
    {
        char* dest = input;
        char* src = input;
    
        while(*src)
        {
            if (isdigit(*src)) { src++; continue; }
            *dest++ = *src++;
        }
        *dest = '\0';
        return input;
    }
    

    Test:

    int main(void)
    {
        char inText[] = "123 Mickey 456";
        printf("The result is %s\n", RemoveDigits(inText));
        // Expected Output: " Mickey "
    }
    

    The numbers were removed.