Изчислете сумата на всички числа, присъстващи в низ
#practiceLinkDiv { display: none !important; } Даден е низ С съдържащ буквено-цифрови знаци Задачата е да се изчисли сумата от всички числа, присъстващи в низа.
Примери:
Препоръчителна практика Сума от числа в низ Опитайте!вход: 1abc23
Изход: 24
Обяснение: 1 + 23 = 24вход: geeks4geeks
Изход: 4вход: 1abc2x30yz67
Изход: 100
Подход:
Сканирайте всеки знак от въведения низ и ако числото е образувано от последователни знаци от низа, увеличете резултат с тази сума. Единствената трудна част от този въпрос е, че множество последователни цифри се считат за едно число.
Следвайте стъпките по-долу, за да реализирате идеята:
- Създайте празен низ темп и цяло число сума .
- Обхождане на всички знаци от низа.
- Ако знакът е цифрова цифра, добавете го към темп .
- В противен случай преобразувайте временния низ в число и го добавете към сума празен темп .
- Връща сума + число, получено от темп.
По-долу е изпълнението на горния подход:
C++ // C++ program to calculate sum of all numbers present // in a string containing alphanumeric characters #include using namespace std ; // Function to calculate sum of all numbers present // in a string containing alphanumeric characters int findSum ( string str ) { // A temporary string string temp = '' ; // holds sum of all numbers present in the string int sum = 0 ; // read each character in input string for ( char ch : str ) { // if current character is a digit if ( isdigit ( ch )) temp += ch ; // if current character is an alphabet else { // increment sum by number found earlier // (if any) sum += atoi ( temp . c_str ()); // reset temporary string to empty temp = '' ; } } // atoi(temp.c_str()) takes care of trailing // numbers return sum + atoi ( temp . c_str ()); } // Driver code int main () { // input alphanumeric string string str = '12abc20yz68' ; // Function call cout < < findSum ( str ); return 0 ; }
Java // Java program to calculate sum of all numbers present // in a string containing alphanumeric characters import java.io.* ; class GFG { // Function to calculate sum of all numbers present // in a string containing alphanumeric characters static int findSum ( String str ) { // A temporary string String temp = '0' ; // holds sum of all numbers present in the string int sum = 0 ; // read each character in input string for ( int i = 0 ; i < str . length (); i ++ ) { char ch = str . charAt ( i ); // if current character is a digit if ( Character . isDigit ( ch )) temp += ch ; // if current character is an alphabet else { // increment sum by number found earlier // (if any) sum += Integer . parseInt ( temp ); // reset temporary string to empty temp = '0' ; } } // atoi(temp.c_str()) takes care of trailing // numbers return sum + Integer . parseInt ( temp ); } // Driver code public static void main ( String [] args ) { // input alphanumeric string String str = '12abc20yz68' ; // Function call System . out . println ( findSum ( str )); } } // This code is contributed by AnkitRai01
Python3 # Python3 program to calculate sum of # all numbers present in a string # containing alphanumeric characters # Function to calculate sum of all # numbers present in a string # containing alphanumeric characters def findSum ( str1 ): # A temporary string temp = '0' # holds sum of all numbers # present in the string Sum = 0 # read each character in input string for ch in str1 : # if current character is a digit if ( ch . isdigit ()): temp += ch # if current character is an alphabet else : # increment Sum by number found # earlier(if any) Sum += int ( temp ) # reset temporary string to empty temp = '0' # atoi(temp.c_str1()) takes care # of trailing numbers return Sum + int ( temp ) # Driver code # input alphanumeric string str1 = '12abc20yz68' # Function call print ( findSum ( str1 )) # This code is contributed # by mohit kumar
C# // C# program to calculate sum of // all numbers present in a string // containing alphanumeric characters using System ; class GFG { // Function to calculate sum of // all numbers present in a string // containing alphanumeric characters static int findSum ( String str ) { // A temporary string String temp = '0' ; // holds sum of all numbers // present in the string int sum = 0 ; // read each character in input string for ( int i = 0 ; i < str . Length ; i ++ ) { char ch = str [ i ]; // if current character is a digit if ( char . IsDigit ( ch )) temp += ch ; // if current character is an alphabet else { // increment sum by number found earlier // (if any) sum += int . Parse ( temp ); // reset temporary string to empty temp = '0' ; } } // atoi(temp.c_str()) takes care of trailing // numbers return sum + int . Parse ( temp ); } // Driver code public static void Main ( String [] args ) { // input alphanumeric string String str = '12abc20yz68' ; // Function call Console . WriteLine ( findSum ( str )); } } // This code is contributed by PrinciRaj1992
JavaScript < script > // Javascript program to calculate // sum of all numbers present // in a string containing // alphanumeric characters // Function to calculate sum // of all numbers present // in a string containing // alphanumeric characters function findSum ( str ) { // A temporary string let temp = '0' ; // holds sum of all numbers // present in the string let sum = 0 ; // read each character in input string for ( let i = 0 ; i < str . length ; i ++ ) { let ch = str [ i ]; // if current character is a digit if ( ! isNaN ( String ( ch ) * 1 )) temp += ch ; // if current character is an alphabet else { // increment sum by number found earlier // (if any) sum += parseInt ( temp ); // reset temporary string to empty temp = '0' ; } } // atoi(temp.c_str()) takes care of trailing // numbers return sum + parseInt ( temp ); } // Driver code // input alphanumeric string let str = '12abc20yz68' ; // Function call document . write ( findSum ( str )); // This code is contributed by unknown2108 < /script>
Изход
100
Времева сложност: O(N), където n е дължината на низа.
Помощно пространство: O(N), където n е дължината на низа.
Изчислете сумата на всички числа, присъстващи в низ, като използвате рекурсия
Идеята е да преминете рекурсивно през низа и да откриете числа след това добавете тези числа към резултат най-сетне върнете резултат .
Следвайте стъпките по-долу, за да реализирате идеята:
- Създайте празен низ темп и цяло число сума .
- Рекурсивно преминаване през знаците за всеки индекс i от към дължина - 1 .
- Ако i = N-1 след това проверете дали текущият знак е връщане на цифра str[i] - '0' .
- Иначе връщане .
- Ако стр[и] е цифра.
- Изпълнете for цикъл с брояч й от i към N - 1 .
- Ако знакът е цифрова цифра, добавете го към темп .
- Друга почивка.
- Връщане сума на числова стойност на temp + повторение за индекс й .
- Изпълнете for цикъл с брояч й от i към N - 1 .
По-долу е изпълнението на горния подход:
C++ // C++ program to calculate sum of all numbers // present in a string containing alphanumeric // characters #include using namespace std ; int solve ( string & str int i int n ) { // if string is empty if ( i >= n ) return 0 ; // if on the last index if ( i == n - 1 ) { // if last digit is numeric if ( isdigit ( str [ i ])) { return str [ i ] - '0' ; } else { return 0 ; } } // if current char is digit // then sum the consecutive digits if ( isdigit ( str [ i ])) { // declared an empty string string temp = '' ; int j ; // start from that index // sum all the consecutive digits for ( j = i ; j < n ; j ++ ) { // if current char is digit // add it to the temp string if ( isdigit ( str [ j ])) temp += str [ j ]; // if it is not a digit // break instantly else break ; } // add the number associated to temp // with the answer recursion will bring return stoi ( temp ) + solve ( str j n ); } // else call from the next index else { solve ( str i + 1 n ); } } int findSum ( string str ) { // recursiven function return solve ( str 0 str . size ()); } // Driver code int main () { // input alphanumeric string string str = '12abc20yz68' ; // Function call cout < < findSum ( str ); return 0 ; }
Java import java.util.Scanner ; class Main { static int solve ( String str int i int n ) { // if string is empty if ( i >= n ) return 0 ; // if on the last index if ( i == n - 1 ) { // if last digit is numeric if ( Character . isDigit ( str . charAt ( i ))) { return str . charAt ( i ) - '0' ; } else { return 0 ; } } // if current char is digit // then sum the consecutive digits if ( Character . isDigit ( str . charAt ( i ))) { // declared an empty string String temp = '' ; int j ; // start from that index // sum all the consecutive digits for ( j = i ; j < n ; j ++ ) { // if current char is digit // add it to the temp string if ( Character . isDigit ( str . charAt ( j ))) temp += str . charAt ( j ); // if it is not a digit // break instantly else break ; } // add the number associated to temp // with the answer recursion will bring return Integer . parseInt ( temp ) + solve ( str j n ); } // else call from the next index else { return solve ( str i + 1 n ); } } static int findSum ( String str ) { // recursiven function return solve ( str 0 str . length ()); } // Driver code public static void main ( String [] args ) { // input alphanumeric string String str = '12abc20yz68' ; // Function call System . out . println ( findSum ( str )); } } // This code contributed by Ajax
Python3 def findSum ( str ): # variable to store sum result = 0 temp = '' for i in range ( len ( str )): if str [ i ] . isnumeric (): temp += str [ i ] if i == len ( str ) - 1 : result += int ( temp ) else : if temp != '' : result += int ( temp ) temp = '' return result # driver code if __name__ == '__main__' : # input alphanumeric string str = '12abc20yz68' print ( findSum ( str )) #This code contributed by Shivam Tiwari
C# // C# program to calculate sum of all numbers // present in a string containing alphanumeric // characters using System ; using System.Linq ; using System.Collections.Generic ; class GFG { static bool isdigit ( char c ) { if ( c >= '0' && c <= '9' ) return true ; return false ; } static int solve ( string str int i int n ) { // if string is empty if ( i >= n ) return 0 ; // if on the last index if ( i == n - 1 ) { // if last digit is numeric if ( isdigit ( str [ i ])) { return str [ i ]; } else { return 0 ; } } // if current char is digit // then sum the consecutive digits if ( isdigit ( str [ i ])) { // declared an empty string string temp = '' ; int j ; // start from that index // sum all the consecutive digits for ( j = i ; j < n ; j ++ ) { // if current char is digit // add it to the temp string if ( isdigit ( str [ j ])) temp += str [ j ]; // if it is not a digit // break instantly else break ; } // add the number associated to temp // with the answer recursion will bring return Int32 . Parse ( temp ) + solve ( str j n ); } // else call from the next index else { return solve ( str i + 1 n ); } } static int findSum ( string str ) { // recursiven function return solve ( str 0 str . Length ); } // Driver code static public void Main () { // input alphanumeric string string str = '12abc20yz68' ; // Function call Console . Write ( findSum ( str )); } }
JavaScript function findSum ( str ) { // variable to store sum let result = 0 ; let temp = '' ; for ( let i = 0 ; i < str . length ; i ++ ) { if ( ! isNaN ( str [ i ])) { temp += str [ i ]; if ( i === str . length - 1 ) { result += parseInt ( temp ); } } else { if ( temp !== '' ) { result += parseInt ( temp ); temp = '' ; } } } return result ; } // driver code console . log ( findSum ( '12abc20yz68' )); // This code is contributed by Shivam Tiwari
Изход
100
Времева сложност: O(N) където N е размерът на дадения низ.
Помощно пространство: O(N) в най-лошия случай може да струва O(N) рекурсивни повиквания
Изчислете сумата на всички числа, присъстващи в низ, като използвате Regex в Python:
Идеята е да се използва вградена функция Python RegEx .
По-долу е изпълнението на горния подход:
C++14 #include #include // Function to calculate sum of all // numbers present in a string // containing alphanumeric characters int findSum ( std :: string str ) { // Regular Expression that matches // digits in between a string std :: regex pattern ( ' \ d+' ); std :: smatch match ; int sum = 0 ; while ( std :: regex_search ( str match pattern )) { sum += stoi ( match [ 0 ]. str ()); str = match . suffix (). str (); } return sum ; } // Driver code int main () { // input alphanumeric string std :: string str = '12abc20yz68' ; // Function call std :: cout < < findSum ( str ) < < std :: endl ; return 0 ; } // This code is contributed by Shivam Tiwari
Python3 # Python3 program to calculate sum of # all numbers present in a string # containing alphanumeric characters # Function to calculate sum of all # numbers present in a string # containing alphanumeric characters import re def find_sum ( str1 ): # Regular Expression that matches # digits in between a string return sum ( map ( int re . findall ( 'd+' str1 ))) # Driver code # input alphanumeric string str1 = '12abc20yz68' # Function call print ( find_sum ( str1 )) # This code is contributed # by Venkata Ramana B
JavaScript // JavaScript program to calculate sum of // all numbers present in a string // containing alphanumeric characters // Function to calculate sum of all // numbers present in a string // containing alphanumeric characters function find_sum ( str1 ) { // Regular Expression that matches // digits in between a string return str1 . match ( /d+/g ). reduce (( acc val ) => acc + parseInt ( val ) 0 ); } // Driver code // input alphanumeric string const str1 = '12abc20yz68' ; // Function call console . log ( find_sum ( str1 ));
Java import java.util.regex.* ; public class Main { // Function to calculate sum of all // numbers present in a string // containing alphanumeric characters public static int findSum ( String str ) { // Regular Expression that matches // digits in between a string Pattern pattern = Pattern . compile ( '\d+' ); Matcher matcher = pattern . matcher ( str ); int sum = 0 ; while ( matcher . find ()) { sum += Integer . parseInt ( matcher . group ()); str = matcher . replaceFirst ( '' ); matcher = pattern . matcher ( str ); } return sum ; } // Driver code public static void main ( String [] args ) { // input alphanumeric string String str = '12abc20yz68' ; // Function call System . out . println ( findSum ( str )); } }
C# using System ; using System.Text.RegularExpressions ; public class GFG { // Function to calculate sum of all // numbers present in a string // containing alphanumeric characters public static int FindSum ( string str ) { // Regular Expression that matches // digits in between a string Regex pattern = new Regex ( @'d+' ); Match matcher = pattern . Match ( str ); int sum = 0 ; while ( matcher . Success ) { sum += Int32 . Parse ( matcher . Value ); str = pattern . Replace ( str '' 1 matcher . Index ); matcher = pattern . Match ( str ); } return sum ; } // Main method static public void Main () { // input alphanumeric string string str = '12abc20yz68' ; // Function call Console . WriteLine ( FindSum ( str )); } }
Изход
100
Времева сложност: O(n), където n е дължината на низа.
Помощно пространство: O(n), където n е дължината на низа.