Heim >Backend-Entwicklung >C++ >Ermitteln Sie anhand einer gegebenen Zeichenfolge die Summe der darin enthaltenen aufeinanderfolgenden Zahlen
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.
str = “12were43”
55
Die Summe aus 12 und 43 ergibt 55,
str = “1a2c3d”
6
Die Summe aus 1, 2 und 3 ist 6.
str = “werderfrewsf”
0
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.
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.
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.
#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; }
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.
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.
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 6Beispiel
#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; }
The sum of consecutive digits in the given string is - 48
Raumkomplexität
Methode 3
Schritt 1
Schritt 2
Schritt 3
Schritt 4
Schritt 5
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; }
The sum of consecutive digits in the given string is - 0
Raumkomplexität
Fazit
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!