Rumah > Artikel > pembangunan bahagian belakang > 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++.
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.
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 bagiIni 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; }
The jumbled digits in the string are: 1 2
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".
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!