Aprēķiniet visu virknē esošo skaitļu summu

Aprēķiniet visu virknē esošo skaitļu summu
Izmēģiniet to GfG Practice #practiceLinkDiv { display: none !important; }

Dota virkne S kas satur burtciparu rakstzīmes Uzdevums ir aprēķināt visu virknē esošo skaitļu summu.

Piemēri:  

Ievade:  1abc23
Izvade: 24
Paskaidrojums: 1 + 23 = 24

Ievade:  geeks4geeks
Izvade: 4

Ievade:  1abc2x30yz67
Izvade: 100

Ieteicamā prakse Skaitļu summa virknē Izmēģiniet to!

Pieeja:

Skenējiet katru ievades virknes rakstzīmi un, ja skaitli veido secīgas virknes rakstzīmes, palieliniet rezultāts par šo summu. Vienīgā šī jautājuma sarežģītā daļa ir tā, ka vairāki cipari pēc kārtas tiek uzskatīti par vienu skaitli.

Lai īstenotu ideju, veiciet tālāk norādītās darbības.

  • Izveidojiet tukšu virkni temp un vesels skaitlis summa .
  • Atkārtojiet visas virknes rakstzīmes.
    • Ja rakstzīme ir cipars, pievienojiet to temp .
    • Citādi konvertējiet temp virkni par skaitli un pievienojiet to summa tukšs temp .
  • Atgriešanās summa + skaitlis, kas iegūts no temp.

Tālāk ir aprakstīta iepriekš minētās pieejas īstenošana.

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>   

Izvade
100 


Laika sarežģītība: O(N) kur n ir virknes garums. 
Palīgtelpa: O(N) kur n ir virknes garums.

Aprēķiniet visu virknē esošo skaitļu summu, izmantojot rekursija

Ideja ir rekursīvi šķērsot virkni un noskaidrot cipariem pēc tam pievienojiet šos skaitļus rezultāts beidzot atgriezieties rezultāts

Lai īstenotu ideju, veiciet tālāk norādītās darbības.

  • Izveidojiet tukšu virkni temp un vesels skaitlis summa .
  • Rekursīvi šķērsojiet katra indeksa rakstzīmes i no uz garums - 1 .
    • Ja i = N-1 pēc tam pārbaudiet, vai pašreizējā rakstzīme ir ciparu atgriešana str[i] - '0' .
    • Citādi atgriešanās .
    • Ja str[i] ir cipars.
      • Palaidiet for cilpu ar skaitītāju no i uz N-1 .
        • Ja rakstzīme ir cipars, pievienojiet to temp .
        • Citādi pārtraukums.
      • Atgriezties summa no temp + atkārtotas indeksa skaitliskās vērtības j .

Tālāk ir aprakstīta iepriekš minētās pieejas īstenošana.

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   

Izvade
100 

Laika sarežģītība: O(N) kur N ir dotās virknes lielums.
Palīgtelpa: O(N) sliktākajā gadījumā tas var maksāt O(N) rekursīvus zvanus

Aprēķiniet visu virknē esošo skaitļu summu, izmantojot Regex programmā Python:

Ideja ir izmantot iebūvēto funkciju Python RegEx . 

Zemāk ir aprakstīta iepriekš minētās pieejas īstenošana:

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

Izvade
100 

Laika sarežģītība: O(n) kur n ir virknes garums. 
Palīgtelpa: O(n) kur n ir virknes garums.