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

Given an alphanumeric string, extract maximum numeric value from that string. Alphabets will only be in lower case.
One approach to solve 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:

  1. If a numeric value is present at the current index then convert it into an integer
           num = num*10 + (str[i]-'0') 
  2. Otherwise update maximum value and reset num = 0.

Return the maximum value at the last.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to extract the maximum value
#include<bits/stdc++.h>
using namespace std;
  
// Function to extract the maximum value
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 (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 program
int main()
{
    string str = "100klh564abc365bg";
    cout << extractMaximum(str);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }    
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 program to extract
# the maximum value
def 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 Code
ss = "100klh564abc365bg"
  
print(extractMaximum(ss))
  
# This code is contributed
# by mohit kumar 29

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to extract the maximum value
using 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to extract the maximum value
  
// Function to extract the maximum value
function 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.
?>

chevron_right



Output:

564

But in the case of large numbers above program wouldn’t work because of integer range in C and C++. So, to handle the case of large numbers we have to take each numeric value as separate string and then find 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program for above implementation
#include<bits/stdc++.h>
using namespace std;
  
// Utility function to find maximum string
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;
}
  
// Function to extract the maximum value
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 && 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 program
int main()
{
    string str ="100klh564abc365bg";
    cout << extractMaximum(str) << endl;
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }    
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program for above implementation
  
# Utility function to find maximum string
def 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 value
def 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 Code
str ="100klh564abc365bg";
print(extractMaximum(str));
      
# This code is contributed by mits

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program for above implementation
  
// Utility function to find maximum string
function 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 value
function 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
?>

chevron_right



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 contribute.geeksforgeeks.org or mail your article to contribute@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.



My Personal Notes arrow_drop_up