Valid Number

Validate if a given string can be interpreted as a decimal number.

Some examples:


"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3   " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false

Note: Checks

  • Numbers 0-9
  • Exponent - "e"
  • Positive/negative sign - "+"/"-"
  • Decimal point - "."

Example 1:

Input: s = "3"
Output: true

Approach:


Java

public class ValidNumber {
    public static void main(String[] args) {
        String s = "0e";
        System.out.println(isNumber(s));
    }

    // method to check if the number
    // represented by string is valid or not
    private static boolean isNumber(String s) {

        int n = s.length();
        int digit = 0, dots = 0;
        int i = 0;

        // iterate till their is spaces
        // in start of number
        while (i < n && s.charAt(i) == ' ')
            i++;
        // if positive sign or negative sign
        if (i < n && (s.charAt(i) == '+' || s.charAt(i) == '-'))
            i++;
        while (i < n) {
            if (Character.isDigit(s.charAt(i))) {
                digit++;
                i++;
            } else if (s.charAt(i) == '.') {
                dots++;
                i++;
            } else
                break;
        }

        // if their is no digits and
        // and we have dots then return false
        if (digit == 0 || dots > 1)
            return false;

        // if their is exponent
        if (i<n && s.charAt(i) == 'e') {
            i++;
            // if + ,- sign
            if (i<n && (s.charAt(i) == '+' || s.charAt(i) == '-'))
                i++;

            digit = 0;
            while (i < n) {
                if (Character.isDigit(s.charAt(i))) {
                    i++;
                    digit++;
                } else
                    break;
            }

            // if no digits return false
            if (digit == 0)
                return false;

        }
        // if spaces move to next
        while (i < n && s.charAt(i) == ' ')
            i++;
        // if we not reach at end the return false
        if (i < n)
            return false;

        // else number is valid
        return true;
    }
}


C++

#include <bits/stdc++.h>
using namespace std;

//function to check if the number
//represented by string is valid or not
bool isNumber(string s
{
    int n=s.size();
    int digit=0,dots=0;
    int i=0;

    //iterate till their is spaces
    //in start of number
    while(i<n&&s[i]==' ')
              i++;
    //if positive sign or negaitve sign
    if(s[i]=='+'||s[i]=='-')
              i++;
   while(i<n)
        {
            if(isdigit(s[i]))
            {
                digit++;
                i++;
            }
            else if(s[i]=='.')
            {
                dots++;
                i++;
            }
            else
                  break;
      }

      //if their is no digits and
      // and we have dots then return false
     if(digit==0||dots>1)
              return false;
    
    //if thier is exponent
     if(s[i]=='e')
        {
            i++;
            //if + ,- sign
            if(s[i]=='+'||s[i]=='-')
                  i++;
           
            digit=0;
            while(i<n)
            {
                if(isdigit(s[i]))
                {
                    i++;
                    digit++;
                }
                else
                     break;
            }

        //if no digits retunr false
          if(digit==0)
                return false;
            
        }
     //if spaces move to next
        while(i<n&&s[i]==' ')
              i++;
        //if we not reach at end the return false
        if(i<n)
              return false;

      //else number is valid 
        return true;
}
int main()
{
  string s="3";
  if(isNumber(s))
    cout<<"true\n";
  else
    cout<<"false\n";
   return 0;
 
}


No comments:

Post a Comment