Heim >Backend-Entwicklung >C++ >Ermitteln Sie anhand einer gegebenen Zeichenfolge die Summe der darin enthaltenen aufeinanderfolgenden Zahlen

Ermitteln Sie anhand einer gegebenen Zeichenfolge die Summe der darin enthaltenen aufeinanderfolgenden Zahlen

王林
王林nach vorne
2023-08-28 09:17:14750Durchsuche

Ermitteln Sie anhand einer gegebenen Zeichenfolge die Summe der darin enthaltenen aufeinanderfolgenden Zahlen

Problemstellung

Wir haben eine Zeichenfolge str angegeben, die die numerischen und alphabetischen Zeichen enthält. Wir müssen die Summe aller Zahlen ermitteln, die durch eine fortlaufende Ziffernfolge in der angegebenen Zeichenfolge dargestellt werden.

Beispiel Beispiel

Eingabe

str = “12were43”

Ausgabe

55

Erklärung

Die Summe aus 12 und 43 ergibt 55,

Eingabe

str = “1a2c3d”

Ausgabe

6

Erklärung

Die Summe aus 1, 2 und 3 ist 6.

Eingabe

str = “werderfrewsf”

Ausgabe

0

Erklärung

Die Ausgabe ergibt 0, da die Zeichenfolge keine Ziffer enthält.

Unsere Logik zur Lösung des Problems besteht darin, alle Zahlen aus der gegebenen Zeichenfolge zu extrahieren und sie zu summieren.

Methode 1

Bei diesem Ansatz verwenden wir die Methode isDigit(), um zu prüfen, ob das aktuelle Zeichen eine Ziffer ist. Außerdem multiplizieren wir den aktuellen Wert der Zahl mit 10 und addieren das aktuelle Zeichen zur Zahl, wenn das aktuelle Zeichen eine Ziffer ist.

Algorithmus

  • Schritt 1 – Initialisieren Sie die Variablen „Zahl“ und „Summe“ auf Null.

  • Schritt 2 - Durchlaufen Sie die Zeichenfolge und prüfen Sie, ob das aktuelle Zeichen zwischen 0 und 9 liegt, indem Sie die Methode isDigit() verwenden.

  • Schritt 3 – Wenn das aktuelle Zeichen eine Zahl ist, multiplizieren Sie den Zahlenwert mit 10 und addieren Sie den aktuellen Zahlenwert.

  • Schritt 4 – Wenn das aktuelle Zeichen keine Zahl ist, addieren Sie den Wert der Variablen „Zahl“ zur Variablen „Summe“ und aktualisieren Sie den Wert der Variablen „Zahl“ auf Null.

  • Schritt 5 − Sobald die Iteration der Schleife abgeschlossen ist, addieren Sie den Wert der „Zahl“ zur Variablen „Summe“ und geben Sie den Wert der Variablen „Summe“ zurück.

Beispiel

#include <bits/stdc++.h>
using namespace std;
// function to return the sum of the consecutive number present in the string
int getSumOfDigits(string str){
   // store the current number
   int number = 0;
   // Stores total sum
   int sum = 0;
   // Traverse the string
   for (auto &ch : str){
      // If the current character is between '0' and '9', append it to the number
      if (isdigit(ch)) {
         number = number * 10 + ch - '0';
      } else {
         // 	if the current character is not between '0' and '9', add 'number' to the sum and reset 'number'
         sum += number;
         number = 0;
      }
   }
   // if the number is greater than 0, add it to sum
   sum += number;
   return sum;
}
int main(){
   string str = "6we24er5rd6";
   cout << "The sum of consecutive digits in the given string is - " << getSumOfDigits(str);
   return 0;
}

Ausgabe

The sum of consecutive digits in the given string is - 41
  • Zeitkomplexität - O(n), weil wir nur eine Schleife verwenden.

  • Raumkomplexität − O(1), da wir keinen zusätzlichen Raum verbrauchen.

Ansatz 2

Bei diesem Ansatz verwenden wir die ASCII-Werte des Zeichens, um zu prüfen, ob das aktuelle Zeichen eine Ziffer ist. Außerdem hängen wir Zeichen an die Variable „Zahl“ an, bis wir Ziffern in der Zeichenfolge erhalten, und verwenden die Methode atoi() um die Zahl aus der Zeichenfolge zu extrahieren.

Algorithmus

  • Schritt 1 – Definieren Sie die Variable „Nummer“ und initialisieren Sie sie mit einer leeren Zeichenfolge. Definieren Sie außerdem die Variable „sum“ und initialisieren Sie sie auf 0.

  • Schritt 2 - Verwenden Sie die for-Schleife, um die Zeichenfolge zu durchlaufen und jedes Zeichen der Zeichenfolge abzurufen.

  • Schritt 3 – Wenn c-‘0’ größer oder gleich Null und kleiner oder gleich 9 ist, bedeutet dies, dass das aktuelle Zeichen eine Zahl ist.

  • Schritt 4 − Wenn das aktuelle Zeichen eine Ziffer ist, hängen Sie es an die Zeichenfolge „Zahl“ an.

  • Schritt 5 − Wenn das aktuelle Zeichen keine Ziffer ist, verwenden Sie die Methode c_str(), um die Zahlenzeichenfolge in ein Zeichenarray umzuwandeln, und übergeben Sie sie als Parameter der Methode atoi(), um die Zeichenfolge in eine Zahl umzuwandeln . Aktualisieren Sie außerdem die Zahlenzeichenfolge mit dem Wert „“. Die atoi()-Methode gibt eine Zahl zurück, wenn die Zeichenfolge in eine Zahl konvertierbar ist. Andernfalls gibt sie Null zurück

    Schritt 6
  • − Sobald die Iteration der for-Schleife abgeschlossen ist, verwenden Sie erneut die Methode atoi(), um die Zeichenfolge in eine Zahl umzuwandeln und zum Summenwert zu addieren.
  • Beispiel

    #include <bits/stdc++.h>
    using namespace std;
    // function to return the sum of the consecutive numbers present in the string
    int getSumOfDigits(string str){
       string number = "";
       // to store the sum of all the consecutive numbers
       int sum = 0;
       // traverse the string
       for (char c : str){
          // if the current character is between 0 to 9
          if (c - '0' >= 0 && c - '0' <= 9){
             // append it to the number string
             number += c;
          }
          // if the current character is an alphabet
          else {
             // convert string to an array of characters and pass it to atoi() function
             sum += atoi(number.c_str());
             // reset temporary string to empty
             number = "";
          }
       }
       // if the number is greater than 0, add it to sum
       sum += atoi(number.c_str());
       return sum;
    }
    int main(){
       string str = "11aa32bbb5";
       cout << "The sum of consecutive digits in the given string is - " << getSumOfDigits(str);
       return 0;
    }
    
  • Ausgabe
The sum of consecutive digits in the given string is - 48

Zeitkomplexität
    - O(N)
  • Raumkomplexität
  • − O(1)
  • Methode 3

  • Bei dieser Methode verwenden wir reguläre Ausdrücke, um die Übereinstimmungen aller Zahlen zu finden. Danach können wir die Zeichenfolge in eine Zahl umwandeln und zur Summenvariablen hinzufügen.

Algorithmus

Schritt 1
    − Definieren Sie das Regex-Muster.
  • Schritt 2
  • - Verwenden Sie die Methode regex_search(), um die Übereinstimmung für die Zahlenzeichenfolge zu finden.
  • Schritt 3
  • − Führen Sie Iterationen mit einer While-Schleife durch, solange wir Übereinstimmungen finden.
  • Schritt 4
  • − Verwenden Sie in der while-Schleife die Methode stoi(), um die Zeichenfolge in eine Zahl umzuwandeln und sie zur Summenvariablen hinzuzufügen.
  • Schritt 5
  • – Aktualisieren Sie die Zeichenfolge erneut mit der Methode match().suffix(). Auf diese Weise erhalten wir keine doppelten Übereinstimmungen.
  • Beispiel

    #include <bits/stdc++.h>
    using namespace std;
    // Function to calculate the sum of the numbers found in the string
    int getSumOfDigits(string str){
       // regex pattern to find the numbers in the string
       regex pattern("d+");
       smatch match;
       // variable to store the sum of the numbers
       int sum = 0;
       // using the regex_search() function to find the numbers
       while (regex_search(str, match, pattern)){
          // adding the numbers to the sum variable
          sum += stoi(match[0].str());
          // update the string
          str = match.suffix().str();
       }
       return sum;
    }
    int main(){
       // input alphanumeric string
       string str = "abc23@12";
       cout << "The sum of consecutive digits in the given string is - " << getSumOfDigits(str);
       return 0;
    }
    
  • Ausgabe
The sum of consecutive digits in the given string is - 0

Zeitkomplexität
    − O(N), da Regex Übereinstimmungen findet, indem er die Zeichenfolge durchläuft.
  • Raumkomplexität
  • − O(1)
  • Fazit

  • Wir haben drei verschiedene Methoden kennengelernt, um die Summe aufeinanderfolgender Zahlen in einer Zeichenfolge zu ermitteln. Die letzte Methode ist der am besten optimierte Code, da sie reguläre Ausdrücke verwendet. Allerdings kann die Arbeit mit regulären Ausdrücken für Anfänger schwierig sein.

Das obige ist der detaillierte Inhalt vonErmitteln Sie anhand einer gegebenen Zeichenfolge die Summe der darin enthaltenen aufeinanderfolgenden Zahlen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen