Extract maximum numeric value from a given string | Set 1 (General approach) - GeeksforGeeks

14 May, 2021
Given an alphanumeric string, extract maximum numeric value from that string. Alphabets will only be in lower case. One approach to solving the problem is discussed here, other using Regular expressions is given in Set 2 Examples:  
Input : 100klh564abc365bg
Output : 564
Maximum numeric value among 100, 564 
and 365 is 564.

Input : abchsd0sdhs
Output : 0
 
Its solution is simple i.e. Start traversing the string and perform two operations:  
If a numeric value is present at the current index then convert it into an integer num = num*10 + (str[i]-'0') Otherwise, update the maximum value and reset num = 0.
If a numeric value is present at the current index then convert it into an integer num = num*10 + (str[i]-'0') 
 num = num*10 + (str[i]-'0') 
Otherwise, update the maximum value and reset num = 0.
Return the maximum value at the last. 
C++
Java
Python3
C#
PHP
Javascript
// C++ program to extract the maximum value#include<bits/stdc++.h>using namespace std;  // Function to extract the maximum valueint extractMaximum(string str){    int num = 0, res = 0;      // Start traversing the given string    for (int i = 0; i<str.length(); i++)    {        // If a numeric value comes, start converting        // it into an integer till there are consecutive        // numeric digits        if (str[i] >= '0' && str[i] <= '9')            num = num * 10 + (str[i]-'0');          // Update maximum value        else        {            res = max(res, num);              // Reset the number            num = 0;        }    }      // Return maximum value    return max(res, num);}  // Driver programint main(){    string str = "100klh564abc365bg";    cout << extractMaximum(str);    return 0;}
// Java program to extract the maximum value  class GFG {    // Method to extract the maximum value    static int extractMaximum(String str)    {        int num = 0, res = 0;               // Start traversing the given string        for (int i = 0; i<str.length(); i++)        {            // If a numeric value comes, start converting            // it into an integer till there are consecutive            // numeric digits            if (Character.isDigit(str.charAt(i)))                num = num * 10 + (str.charAt(i)-'0');                   // Update maximum value            else            {                res = Math.max(res, num);                       // Reset the number                num = 0;            }        }               // Return maximum value        return Math.max(res, num);    }          // Driver method    public static void main(String[] args)     {        String str = "100klh564abc365bg";        System.out.println(extractMaximum(str));    }    }
# Python 3 program to extract# the maximum valuedef extractMaximum(ss):    num, res = 0, 0          # start traversing the given string     for i in range(len(ss)):                  if ss[i] >= "0" and ss[i] <= "9":            num = num * 10 + int(int(ss[i]) - 0)        else:            res = max(res, num)            num = 0              return max(res, num)  # Driver Codess = "100klh564abc365bg"  print(extractMaximum(ss))  # This code is contributed# by mohit kumar 29
// C# program to extract the maximum valueusing System;  class GFG {          // Method to extract the maximum value    static int extractMaximum(String str)    {        int num = 0, res = 0;              // Start traversing the given string        for (int i = 0; i < str.Length; i++)        {                          // If a numeric value comes, start             // converting it into an integer             // till there are consecutive            // numeric digits            if (char.IsDigit(str[i]))                num = num * 10 + (str[i]-'0');                  // Update maximum value            else            {                res = Math.Max(res, num);                      // Reset the number                num = 0;            }        }              // Return maximum value        return Math.Max(res, num);    }          // Driver method    public static void Main()     {        String str = "100klh564abc365bg";                  Console.Write(extractMaximum(str));    } }  // This code is contributed by nitin mittal.
<?php// PHP program to extract the maximum value  // Function to extract the maximum valuefunction extractMaximum($str){    $num = 0;    $res = 0;      // Start traversing the given string    for ($i = 0; $i<strlen($str); $i++)    {                  // If a numeric value comes,        // start converting it into         // an integer till there are        // consecutive numeric digits        if ($str[$i] >= '0' && $str[$i] <= '9')            $num = $num * 10 + ($str[$i]-'0');          // Update maximum value        else        {            $res = max($res, $num);              // Reset the number            $num = 0;        }    }      // Return maximum value    return max($res, $num);}      // Driver Code    $str = "100klh564abc365bg";    echo extractMaximum($str);  // This code is contributed by nitin mittal.?>
<script>  // JavaScript program to extract// the maximum value  // Method to extract the maximum valuefunction extractMaximum(str){    var num = 0, res = 0;       // Start traversing the given string    for (i = 0; i<str.length; i++)    {        // If a numeric value comes,        // start converting        // it into an integer till        // there are consecutive        // numeric digits        if (isDigit(str.charAt(i)))            num = num * 10 +             (str.charAt(i).charCodeAt(0)-            '0'.charCodeAt(0));           // Update maximum value        else        {            res = Math.max(res, num);               // Reset the number            num = 0;        }    }       // Return maximum value    return Math.max(res, num);}  function isDigit(c) {      return c >= '0' && c <= '9';    }      // Driver methodvar str = "100klh564abc365bg";document.write(extractMaximum(str));  // This code is contributed by Amit Katiyar  </script>
Output:  
564
But in the case of large numbers above program wouldn’t work because of the integer range in C and C++. So, to handle the case of large numbers we have to take each numeric value as a separate string and then find the maximum value. 
 
1) Start traversing the given string.
   Continue traversing if there are any 
   leading zeroes or any lowercase character.
  b) Form a string of integer values.
  c) Update the maximum string.
    i) If the maximum string and current 
       string are having equal lengths then 
       on the basis of the first unmatched 
       value return maximum string.
    ii) If both are having different lengths 
        then return the string with greater 
        length.

2) Return maximum string.
 
C++
Java
Python3
C#
PHP
Javascript
// C++ program for above implementation#include<bits/stdc++.h>using namespace std;  // Utility function to find maximum stringstring maximumNum(string curr_num, string res){    int len1 = curr_num.length();    int len2 = res.length();      // If both having equal lengths    if (len1 == len2)    {        // Reach first unmatched character / value        int i = 0;        while (curr_num[i]== res[i])            i++;          // Return string with maximum value        if (curr_num[i] < res[i])            return res;        else            return curr_num;    }      // If different lengths    // return string with maximum length    return len1 < len2 ? res: curr_num;}  // Function to extract the maximum valuestring extractMaximum(string str){    int n = str.length();    string curr_num ="";    string res;      // Start traversing the string    for (int i = 0; i<n; i++)    {        // Ignore leading zeroes        while (i<n && str[i]=='0')            i++;          // Store numeric value into a string        while (i<n && str[i]>='0' && str[i]<='9')        {            curr_num = curr_num + str[i];            i++;        }          if (i == n)            break;          if (curr_num.size() > 0)            i--;          // Update maximum string        res = maximumNum(curr_num, res);          curr_num = "";    }      // To handle the case if there is only    // 0 numeric value    if (curr_num.size()== 0 && res.size()== 0)        res = res + '0';      // Return maximum string    return maximumNum(curr_num, res);}  // Drivers programint main(){    string str ="100klh564abc365bg";    cout << extractMaximum(str) << endl;    return 0;}
// Java program for above implementation  class GFG {    // Utility method to find maximum string    static String maximumNum(String curr_num, String res)    {        int len1 = curr_num.length();        int len2 = res.length();               // If both having equal lengths        if (len1 == len2)        {            // Reach first unmatched character / value            int i = 0;            while (curr_num.charAt(i) == res.charAt(i))                i++;                   // Return string with maximum value            if (curr_num.charAt(i) < res.charAt(i))                return res;            else                return curr_num;        }               // If different lengths        // return string with maximum length        return len1 < len2 ? res: curr_num;    }           // Method to extract the maximum value    static String extractMaximum(String str)    {        int n = str.length();        String curr_num ="";        String res="";               // Start traversing the string        for (int i = 0; i<n; i++)        {            // Ignore leading zeroes            while (i<n && str.charAt(i)=='0')                i++;                   // Store numeric value into a string            while (i<n && Character.isDigit(str.charAt(i)))            {                curr_num = curr_num + str.charAt(i);                i++;            }                   if (i == n)                break;                   if (curr_num.length() > 0)                i--;                   // Update maximum string            res = maximumNum(curr_num, res);                   curr_num = "";        }               // To handle the case if there is only        // 0 numeric value        if (curr_num.length() == 0 && res.length() == 0)            res = res + '0';               // Return maximum string        return maximumNum(curr_num, res);    }          // Driver method    public static void main(String[] args)     {        String str = "100klh564abc365bg";        System.out.println(extractMaximum(str));    }    }
# Python3 program for above implementation  # Utility function to find maximum stringdef maximumNum(curr_num, res):      len1 = len(curr_num);    len2 = len(res);      # If both having equal lengths    if (len1 == len2):                  # Reach first unmatched character / value        i = 0;        while (curr_num[i]== res[i]):            i += 1;          # Return string with maximum value        if (curr_num[i] < res[i]):            return res;        else:            return curr_num;      # If different lengths    # return string with maximum length    return res if(len1 < len2) else curr_num;  # Function to extract the maximum valuedef extractMaximum(str):      n = len(str);    curr_num = "";    res = "";      # Start traversing the string    for i in range(n):                  # Ignore leading zeroes        while (i < n and str[i]=='0'):            i += 1;          # Store numeric value into a string        while (i < n and str[i] >= '0' and                          str[i] <= '9'):            curr_num += str[i];            i += 1;          if (i == n):            break;          if (len(curr_num) > 0):            i -= 1;          # Update maximum string        res = maximumNum(curr_num, res);          curr_num = "";      # To handle the case if there is only    # 0 numeric value    if (len(curr_num) == 0 and len(res) == 0):        res += '0';      # Return maximum string    return maximumNum(curr_num, res);  # Driver Codestr ="100klh564abc365bg";print(extractMaximum(str));      # This code is contributed by mits
// C# program for above implementation using System;class GFG {     // Utility method to find maximum string     static String maximumNum(string curr_num, string res)     {         int len1 = curr_num.Length;         int len2 = res.Length;               // If both having equal lengths         if (len1 == len2)         {             // Reach first unmatched character / value             int i = 0;             while (curr_num[i] == res[i])                 i++;                   // Return string with maximum value             if (curr_num[i] < res[i])                 return res;             else                return curr_num;         }               // If different lengths         // return string with maximum length         return len1 < len2 ? res: curr_num;     }           // Method to extract the maximum value     static string extractMaximum(string str)     {         int n = str.Length;         string curr_num ="";         string res="";               // Start traversing the string         for (int i = 0; i<n; i++)         {             // Ignore leading zeroes             while (i<n && str[i]=='0')                 i++;                   // Store numeric value into a string             while (i<n && Char.IsDigit(str[i]))             {                 curr_num = curr_num + str[i];                 i++;             }                   if (i == n)                 break;                   if (curr_num.Length > 0)                 i--;                   // Update maximum string             res = maximumNum(curr_num, res);                   curr_num = "";         }               // To handle the case if there is only         // 0 numeric value         if (curr_num.Length == 0 && res.Length == 0)             res = res + '0';               // Return maximum string         return maximumNum(curr_num, res);     }           // Driver method     public static void Main()     {         string str = "100klh564abc365bg";         Console.WriteLine(extractMaximum(str));     }     } // This code is contributed by mits
<?php// PHP program for above implementation  // Utility function to find maximum stringfunction maximumNum($curr_num, $res){    $len1 = strlen($curr_num);    $len2 = strlen($res);      // If both having equal lengths    if ($len1 == $len2)    {        // Reach first unmatched character / value        $i = 0;        while ($curr_num[$i]== $res[$i])            $i++;          // Return string with maximum value        if ($curr_num[$i] < $res[$i])            return $res;        else            return $curr_num;    }      // If different lengths    // return string with maximum length    return $len1 < $len2 ? $res: $curr_num;}  // Function to extract the maximum valuefunction extractMaximum($str){    $n = strlen($str);    $curr_num ="";    $res="";      // Start traversing the string    for ($i = 0; $i<$n; $i++)    {        // Ignore leading zeroes        while ($i<$n && $str[$i]=='0')            $i++;          // Store numeric value into a string        while ($i<$n && $str[$i]>='0' && $str[$i]<='9')        {            $curr_num .= $str[$i];            $i++;        }          if ($i == $n)            break;          if (strlen($curr_num) > 0)            $i--;          // Update maximum string        $res = maximumNum($curr_num, $res);          $curr_num = "";    }      // To handle the case if there is only    // 0 numeric value    if (strlen($curr_num)== 0 && strlen($res)== 0)        $res .= '0';      // Return maximum string    return maximumNum($curr_num, $res);}  // Drivers program      $str ="100klh564abc365bg";    echo extractMaximum($str);      // this code is contributed by mits?>
<script>  // JavaScript program for above implementation            // Utility method to find maximum string    function maximumNum(curr_num,res)    {        let len1 = curr_num.length;        let len2 = res.length;                 // If both having equal lengths        if (len1 == len2)        {            // Reach first unmatched character / value            let i = 0;            while (curr_num[i] == res[i])                i++;                     // Return string with maximum value            if (curr_num[i] < res[i])                return res;            else                return curr_num;        }                 // If different lengths        // return string with maximum length        return len1 < len2 ? res: curr_num;    }          // Method to extract the maximum value    function extractMaximum(str)    {        let n = str.length;        let curr_num ="";        let res="";                 // Start traversing the string        for (let i = 0; i<n; i++)        {            // Ignore leading zeroes            while (i<n && str[i]=='0')                i++;                     // Store numeric value into a string            while (i<n && !isNaN(String(str[i]) * 1))            {                curr_num = curr_num + str[i];                i++;            }                     if (i == n)                break;                     if (curr_num.length > 0)                i--;                     // Update maximum string            res = maximumNum(curr_num, res);                     curr_num = "";        }                 // To handle the case if there is only        // 0 numeric value        if (curr_num.length == 0 && res.length == 0)            res = res + '0';                 // Return maximum string        return maximumNum(curr_num, res);    }          // Driver method    let str = "100klh564abc365bg";    document.write(extractMaximum(str));        // This code is contributed by unknown2108  </script>
Output:  
564
This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
nitin mittal
mohit kumar 29
Mithun Kumar
amit143katiyar
unknown2108
Amazon
Mathematical
Strings
Amazon
Strings
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Merge two sorted arrays
Program to find GCD or HCF of two numbers
Modulo Operator (%) in C/C++ with Examples
Prime Numbers
Sieve of Eratosthenes
Reverse a string in Java
Write a program to reverse an array or string
Longest Common Subsequence | DP-4
Python program to check if a string is palindrome or not
Check for Balanced Brackets in an expression (well-formedness) using Stack