📜  给定字符串存在的连续数字形成的数字总和

📅  最后修改于: 2021-04-17 19:14:47             🧑  作者: Mango

给定一个由数字[0 – 9]和小写字母组成的字符串S ,任务是计算由字符串S中存在的连续数字序列表示的所有数字的总和。

例子:

方法:请按照以下步骤解决问题:

  • 初始化一个变量,例如curr ,以存储当前连续数字序列
  • 遍历字符串的字符。
  • 如果当前字符不是数字,则将curr的当前值添加到最终答案中。将curr重置为0
  • 否则,将当前数字附加到curr
  • 最后,返回最终答案。

下面是上述方法的实现:

C++
// C++ Program to implement
// the above approach
#include 
using namespace std;
 
// Function to calculate the sum of
// numbers formed by consecutive
// sequences of digits present in the string
int sumOfDigits(string s)
{
    // Stores consecutive digits
    // present in the string
    int curr = 0;
 
    // Stores the sum
    int ret = 0;
 
    // Iterate over characters
    // of the input string
    for (auto& ch : s) {
 
        // If current character is a digit
        if (isdigit(ch)) {
 
            // Append current digit to curr
            curr = curr * 10 + ch - '0';
        }
        else {
 
            // Add curr to sum
            ret += curr;
 
            // Reset curr
            curr = 0;
        }
    }
 
    ret += curr;
    return ret;
}
 
// Driver Code
int main()
{
    string S = "11aa32bbb5";
    cout << sumOfDigits(S);
    return 0;
}


Java
// Java program to implement
// the above approach
import java.io.*;
import java.util.*;
class GFG
{
 
  // Function to calculate the sum of
  // numbers formed by consecutive
  // sequences of digits present in the string
  static int sumOfDigits(String s)
  {
 
    // Stores consecutive digits
    // present in the string
    int curr = 0;
 
    // Stores the sum
    int ret = 0;
 
    // Iterate over characters
    // of the input string
    for(char ch : s.toCharArray())
    {
 
      // If current character is a digit
      if (ch >= 48 && ch <= 57)
      {
 
        // Append current digit to curr
        curr = curr * 10 + ch - '0';
      }
      else
      {
 
        // Add curr to sum
        ret += curr;
 
        // Reset curr
        curr = 0;
      }
    }
    ret += curr;
    return ret;
  }
 
  // Driver Code
  public static void main(String[] args)
  {
    String S = "11aa32bbb5";
    System.out.print(sumOfDigits(S));
  }
}
 
// This code is contributed by splevel62.


Python3
# Python3 program for the above approach
 
# Function to calculate the sum of
# numbers formed by consecutive
# sequences of digits present in the string
def sumOfDigits(s) :
     
    # Stores consecutive digits
    # present in the string
    curr = 0
 
    # Stores the sum
    ret = 0
 
    # Iterate over characters
    # of the input string
    for ch in s :
 
        # If current character is a digit
        if (ord(ch) >= 48 and ord(ch) <= 57) :
 
            # Append current digit to curr
            curr = curr * 10 + ord(ch) - ord('0')
         
        else :
 
            # Add curr to sum
            ret += curr
 
            # Reset curr
            curr = 0
 
    ret += curr
    return ret
 
# Driver Code
 
S = "11aa32bbb5"
print(sumOfDigits(S))
 
# This code is contributed by code_hunt.


C#
// C# Program to implement
// the above approach
using System;
class GFG
{
     
    // Function to calculate the sum of
    // numbers formed by consecutive
    // sequences of digits present in the string
    static int sumOfDigits(string s)
    {
       
        // Stores consecutive digits
        // present in the string
        int curr = 0;
       
        // Stores the sum
        int ret = 0;
       
        // Iterate over characters
        // of the input string
        foreach(char ch in s)
        {
       
            // If current character is a digit
            if (ch >= 48 && ch <= 57)
            {
       
                // Append current digit to curr
                curr = curr * 10 + ch - '0';
            }
            else
            {
       
                // Add curr to sum
                ret += curr;
       
                // Reset curr
                curr = 0;
            }
        }
        ret += curr;
        return ret;
    }
 
  // Driver code
  static void Main() {
    string S = "11aa32bbb5";
    Console.WriteLine(sumOfDigits(S));
  }
}
 
// This code is conributed by divyeshrabadiya07.


输出:
48

时间复杂度: O(N)
辅助空间: O(1)