Kami telah memberikan rentetan str yang mengandungi aksara angka dan abjad Kami perlu mencari jumlah semua nombor yang diwakili oleh urutan digit berterusan yang tersedia dalam rentetan yang diberikan.
.str = “12were43”
55
Jumlah 12 dan 43 bersamaan dengan 55.
str = “1a2c3d”
6
Jumlah 1, 2 dan 3 ialah 6.
str = “werderfrewsf”
0
Ia memberikan 0 dalam output kerana rentetan tidak mengandungi digit.
Logik kami untuk menyelesaikan masalah adalah untuk mengekstrak semua nombor daripada rentetan yang diberikan dan menjumlahkannya.
Dalam pendekatan ini, kami akan menggunakan kaedah isDigit() untuk menyemak sama ada aksara semasa ialah digit Selain itu, kami mendarabkan nilai semasa nombor dengan 10 dan menambah aksara semasa kepada nombor jika aksara semasa ialah. satu digit.
Langkah 1 - Mulakan pembolehubah 'nombor' dan 'jumlah' kepada sifar.
Langkah 2 − Lelaran melalui rentetan dan semak aksara semasa adalah antara 0-9 menggunakan kaedah isDigit().
Langkah 3 - Jika aksara semasa ialah nombor, darabkan nilai nombor dengan 10 dan tambah nilai nombor semasa.
Langkah 4 - Jika aksara semasa bukan nombor, tambahkan nilai pembolehubah "nombor" pada pembolehubah "jumlah" dan tambah nilai " pembolehubah nombor" Dikemas kini kepada sifar.
Langkah 5 − Setelah lelaran gelung selesai, tambah nilai 'nombor' kepada pembolehubah 'jumlah' dan kembalikan nilai pembolehubah jumlah.
#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
Kerumitan masa - O(n) kerana kami hanya menggunakan satu gelung.
Kerumitan Ruang − O(1) kerana kami tidak menggunakan sebarang ruang tambahan.
Dalam pendekatan ini, kami menggunakan nilai ASCII aksara untuk menyemak sama ada aksara semasa ialah digit Selain itu, kami menambah aksara pada pembolehubah 'nombor' sehingga kami mendapat digit dalam rentetan dan menggunakan atoi () kaedah untuk mengeluarkan nombor daripada rentetan.
Langkah 1 - Takrifkan pembolehubah 'nombor' dan mulakannya kepada rentetan kosong. Juga, tentukan pembolehubah 'jumlah' dan mulakan ia kepada 0.
Langkah 2 − Gunakan gelung untuk melintasi rentetan dan dapatkan setiap aksara rentetan.
Langkah 3 - Jika c-‘0’ lebih besar daripada atau sama dengan sifar dan kurang daripada atau sama dengan 9, ini bermakna aksara semasa ialah nombor.
Langkah 4 − Jika aksara semasa ialah digit, tambahkannya pada rentetan ‘nombor’.
Langkah 5 − Jika aksara semasa bukan digit, gunakan kaedah c_str() untuk menukar rentetan nombor kepada tatasusunan aksara dan hantarkannya sebagai parameter bagi kaedah atoi() untuk menukar rentetan kepada nombor Juga, kemas kini rentetan nombor dengan nilai “”.
Kaedah atoi() mengembalikan nombor jika rentetan itu boleh ditukar kepada nombor; Jika tidak, ia mengembalikan sifar.
Langkah 6 − Setelah lelaran for gelung selesai, sekali lagi gunakan kaedah atoi() untuk menukar rentetan kepada nombor dan menambah nilai tambah.#🎜 🎜#
#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
Kerumitan masa - O(N)
Kerumitan ruang − O(1)
Algoritma
Langkah 1 − Tentukan corak regex.
Langkah 2 − Gunakan kaedah regex_search() untuk mencari padanan bagi rentetan nombor.
Langkah 3 − Buat lelaran menggunakan gelung sementara selagi kita menemui padanan.
Langkah 4 − Dalam gelung while, gunakan kaedah stoi() untuk menukar rentetan kepada nombor dan menambahnya pada pembolehubah jumlah.# 🎜🎜#
- Sekali lagi, gunakan kaedah padanan().suffix() untuk mengemas kini rentetan. Dengan cara ini kita tidak akan mendapat padanan pendua.
#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
− O(N), kerana regex mencari padanan dengan mengulang melalui rentetan.
− O(1)
Atas ialah kandungan terperinci Diberi rentetan, cari jumlah nombor berturut-turut di dalamnya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!