Rumah >pembangunan bahagian belakang >C++ >Diberi rentetan, cari jumlah nombor berturut-turut di dalamnya

Diberi rentetan, cari jumlah nombor berturut-turut di dalamnya

王林
王林ke hadapan
2023-08-28 09:17:14733semak imbas

Diberi rentetan, cari jumlah nombor berturut-turut di dalamnya

Pernyataan Masalah

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.

.

CONTOHCONTOH

Input

str = “12were43”

Output

55

Penjelasan

Jumlah 12 dan 43 bersamaan dengan 55.

Input

str = “1a2c3d”

Output

6

Penjelasan

Jumlah 1, 2 dan 3 ialah 6.

Input

str = “werderfrewsf”

Output

0

Penjelasan

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.

kaedah satu

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.

Algoritma

  • 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.

Contoh

#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;
}

Output

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.

Pendekatan 2

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.

Algoritma

  • 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.#🎜 🎜#

Contoh

#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;
}

Output

The sum of consecutive digits in the given string is - 48

  • Kerumitan masa - O(N)

  • Kerumitan ruang − O(1)

Kaedah 3

Dalam kaedah ini, kami menggunakan ungkapan biasa untuk mencari padanan semua nombor. Selepas itu kita boleh menukar rentetan kepada nombor dan menambahnya kepada pembolehubah jumlah.

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.# 🎜🎜#

  • Langkah 5

    - Sekali lagi, gunakan kaedah padanan().suffix() untuk mengemas kini rentetan. Dengan cara ini kita tidak akan mendapat padanan pendua.

  • Contoh
#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;
}

Output

The sum of consecutive digits in the given string is - 0

  • Kerumitan masa

    − O(N), kerana regex mencari padanan dengan mengulang melalui rentetan.

  • Kerumitan ruang

    − O(1)

  • Kesimpulan

Kami mempelajari tiga cara berbeza untuk mencari jumlah nombor berturut-turut dalam rentetan. Kaedah terakhir ialah kod yang paling dioptimumkan kerana ia menggunakan ungkapan biasa. Walau bagaimanapun, bekerja dengan ungkapan biasa boleh menjadi sukar untuk pemula.

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam