Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Function to check if input string is an integer or floating point number?

Tags:

c

Is there a function in C to check if the input is an int, long int, or float? I know C has an isdigit() function, and I can create an isnumeric function as follows:

int isnumeric( char *str )
{
    while(*str){
        if(!isdigit(*str))
            return 0;   
        str++;
    }
    return 1;
}

But I was wondering how to create a function that would take a floating point number (as a string) and output a TRUE/FALSE value.

like image 463
Marcus Avatar asked Jan 04 '10 05:01

Marcus


1 Answers

This should do it. It converts the string to floating point using strtod and checks to see if there is any more input after it.

int isfloat (const char *s)
{
     char *ep = NULL;
     double f = strtod (s, &ep);

     if (!ep  ||  *ep)
         return false;  // has non-floating digits after number, if any

     return true;
}

To distinguish between floats and ints is trickier. A regex is one way to go, but we could just check for floating chars:

int isfloat (const char *s)
{
     char *ep = NULL;
     long i = strtol (s, &ep);

     if (!*ep)
         return false;  // it's an int

     if (*ep == 'e'  ||
         *ep == 'E'  ||
         *ep == '.')
         return true;

     return false;  // it not a float, but there's more stuff after it
}

Of course, a more streamlined way to do this is to return the type of the value and the value together.

like image 128
wallyk Avatar answered Oct 04 '22 01:10

wallyk