Rumah > pembangunan bahagian belakang > C++ > Diberi rentetan di mana huruf mewakili nombor berebut

Diberi rentetan di mana huruf mewakili nombor berebut

WBOY
Lepaskan: 2023-09-11 20:37:02
ke hadapan
806 orang telah melayarinya

Diberi rentetan di mana huruf mewakili nombor berebut

Dalam artikel hari ini, kami akan menyelidiki isu unik yang berkaitan dengan operasi rentetan dalam C++. Soalan ini ialah "Dalam rentetan yang diberikan, ungkapan abjad ialah nombor bergegar." Soalan ini boleh berfungsi sebagai latihan yang baik untuk meningkatkan kemahiran manipulasi rentetan dan struktur data dalam C++.

Pernyataan Masalah

Diberi rentetan, tugasnya adalah untuk mengenal pasti nombor di mana ungkapan huruf itu diacak. Sebagai contoh, jika rentetan input ialah "oentow", ia mempunyai perwakilan abjad bagi nombor 2 (t, w, o) dan nombor 1 (o, n, e) yang diacak.

Kaedah penyelesaian C++

Untuk menyelesaikan masalah ini, kami akan menggunakan jadual hash atau peta tidak tertib dalam C++ untuk menyimpan kekerapan huruf dalam rentetan. Kami kemudiannya akan membandingkan peta frekuensi ini dengan peta pratakrif perwakilan abjad bagi setiap nombor. Jika perwakilan nombor boleh dibentuk daripada rentetan input, kami akan mengeluarkan nombor itu.

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

Ini adalah kod C++ untuk menyelesaikan masalah −

#include <iostream>
#include <unordered_map>
#include <vector>

// Array of digit representations
std::string digitRepresentations[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

std::unordered_map<char, int> generateFrequencyMap(std::string str) {
   std::unordered_map<char, int> freqMap;
   for (char c : str) {
      freqMap[c]++;
   }
   return freqMap;
}

std::vector<int> findJumbledDigits(std::string str) {
   std::unordered_map<char, int> strFreqMap = generateFrequencyMap(str);
   std::vector<int> digits;
   
   for (int i = 0; i < 10; i++) {
      std::unordered_map<char, int> digitFreqMap = generateFrequencyMap(digitRepresentations[i]);
      bool canFormDigit = true;
   
      for (auto pair : digitFreqMap) {
         if (strFreqMap[pair.first] < pair.second) {
               canFormDigit = false;
               break;
         }
      }
   
      if (canFormDigit) {
         digits.push_back(i);
      }
   }

   return digits;
}

int main() {
   std::string input = "oentow";
   std::vector<int> digits = findJumbledDigits(input);
   
   std::cout << "The jumbled digits in the string are: ";
   for (int digit : digits) {
      std::cout << digit << " ";
   }

   return 0;
}
Salin selepas log masuk

Output

The jumbled digits in the string are: 1 2 
Salin selepas log masuk

Penjelasan dengan Kes Ujian

diterjemahkan sebagai:

Penjelasan dengan Kes Ujian

Mari kita pertimbangkan rentetan "oentow".

Apabila rentetan ini dihantar ke fungsi findJumbledDigits, ia mula-mula menjana peta kekerapan untuk rentetan: {'o': 2, 'e': 1, 'n': 1, 't': 1, 'w' : 1}.

Kemudian, untuk setiap nombor dari 0 hingga 9, ia menjana peta kekerapan bagi perwakilan abjad nombor dan menyemak sama ada peta ini boleh dibentuk daripada peta frekuensi rentetan.

Perwakilan "satu" daripada nombor 1 mempunyai pemetaan kekerapan {'o': 1, 'n': 1, 'e': 1}, manakala perwakilan "dua" nombor 2 mempunyai pemetaan kekerapan {' t': 1 , 'w': 1, 'o': 1}.

Kedua-dua ini boleh dijana oleh peta frekuensi rentetan, jadi kami menambah nombor ini pada hasilnya.

Akhirnya, ia mengeluarkan keputusan: "Digit bercampur aduk dalam rentetan ialah: 1 2".

Kesimpulan

Soalan ini menunjukkan bagaimana kita boleh menggunakan pemetaan frekuensi untuk menyelesaikan masalah manipulasi rentetan yang kompleks dalam C++. Ini ialah soalan yang bagus untuk melatih kemahiran pengendalian rentetan dan struktur data anda. Teruskan berlatih soalan seperti ini untuk meningkatkan kemahiran pengekodan C++ anda.

Atas ialah kandungan terperinci Diberi rentetan di mana huruf mewakili nombor berebut. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan