문자열에 있는 모든 숫자의 합을 계산합니다.

문자열에 있는 모든 숫자의 합을 계산합니다.
GfG Practice에서 사용해 보세요. #practiceLinkDiv { 표시: 없음 !중요; }

문자열이 주어지면 에스 영숫자 문자 포함 이 작업은 문자열에 있는 모든 숫자의 합을 계산하는 것입니다.

예:  

입력:  1abc23
산출: 24
설명: 1 + 23 = 24



입력:  괴짜4괴짜
산출: 4

입력:  1abc2x30yz67
산출: 100

권장 실습 문자열의 숫자 합계 시도해 보세요!

접근하다:

입력 문자열의 각 문자를 스캔하고 숫자가 문자열의 연속 문자로 구성된 경우 숫자를 증가시킵니다. 결과 그 금액만큼. 이 질문에서 유일하게 까다로운 부분은 여러 개의 연속된 숫자가 하나의 숫자로 간주된다는 것입니다.

아이디어를 구현하려면 아래 단계를 따르십시오.

  • 빈 문자열 만들기 온도 그리고 정수 합집합 .
  • 문자열의 모든 문자를 반복합니다.
    • 문자가 숫자인 경우 추가 온도 .
    • 그렇지 않으면 임시 문자열을 숫자로 변환하여 추가합니다. 합집합 비어 있는 온도 .
  • temp에서 얻은 합계 + 숫자를 반환합니다.

다음은 위의 접근 방식을 구현한 것입니다.

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은 문자열의 길이입니다.

다음을 사용하여 문자열에 있는 모든 숫자의 합을 계산합니다. 재귀

아이디어는 문자열을 재귀적으로 탐색하여 다음을 찾는 것입니다. 숫자 그런 다음 이 숫자를 결과 마침내 반환 결과

아이디어를 구현하려면 아래 단계를 따르십시오.

  • 빈 문자열 만들기 온도 그리고 정수 합집합 .
  • 모든 인덱스의 문자를 재귀적으로 순회 ~에서 에게 길이 - 1 .
    • 만약에 나는 = N-1 그런 다음 현재 문자가 숫자 반환인지 확인하십시오. str[i] - '0' .
    • 그렇지 않으면 반환 .
    • 만약에 str[i] 숫자입니다.
      • 카운터를 사용하여 for 루프 실행 ~에서 에게 N - 1 .
        • 문자가 숫자인 경우 추가 온도 .
        • 그렇지 않으면 휴식을 취하십시오.
      • 반품 합집합 temp의 숫자 값 + 인덱스에 대해 반복됨 j .

다음은 위의 접근 방식을 구현한 것입니다.

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 

시간 복잡도: 에) 여기서 N은 주어진 문자열의 크기입니다.
보조 공간: 에) 최악의 경우 O(N) 재귀 호출 비용이 발생할 수 있습니다.

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은 문자열의 길이입니다.

 


인기 기사

범주

재미있는 기사