Im heutigen Artikel werden wir uns mit einem einzigartigen Problem im Zusammenhang mit String-Operationen in C++ befassen. Diese Frage lautet: „In der angegebenen Zeichenfolge besteht der alphabetische Ausdruck aus verschlüsselten Zahlen.“ Diese Frage kann als gute Übung zur Verbesserung Ihrer Fähigkeiten zur Zeichenfolgenmanipulation und Datenstruktur in C++ dienen.
Anhand einer Zeichenfolge besteht die Aufgabe darin, Zahlen zu identifizieren, in denen Buchstabenausdrücke verschlüsselt sind. Wenn die Eingabezeichenfolge beispielsweise „oentow“ lautet, enthält sie eine alphabetische Darstellung der Zahl 2 (t, w, o) und der Zahl 1 (o, n, e), verschlüsselt.
Um dieses Problem zu lösen, verwenden wir eine Hash-Tabelle oder eine ungeordnete Karte in C++, um die Häufigkeit der Buchstaben in der Zeichenfolge zu speichern. Anschließend vergleichen wir diese Häufigkeitskarte mit einer vordefinierten Karte der alphabetischen Darstellung jeder Zahl. Wenn aus der Eingabezeichenfolge eine Darstellung einer Zahl gebildet werden kann, geben wir diese Zahl aus.
Die chinesische Übersetzung vonDies ist der C++-Code zur Lösung des Problems −
#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
Betrachten wir die Zeichenfolge „oentow“.
Wenn diese Zeichenfolge an die Funktion findJumbledDigits übergeben wird, generiert sie zunächst eine Häufigkeitskarte für die Zeichenfolge: {'o': 2, 'e': 1, 'n': 1, 't': 1, 'w': 1}.
Dann wird für jede Zahl von 0 bis 9 eine Häufigkeitskarte der alphabetischen Darstellung der Zahl generiert und geprüft, ob diese Karte aus der Häufigkeitskarte der Zeichenfolge gebildet werden kann.
Die Darstellung „eins“ der Zahl 1 hat die Häufigkeitszuordnung {'o': 1, 'n': 1, 'e': 1}, während die Darstellung „zwei“ der Zahl 2 die Häufigkeitszuordnung {' t': 1 , 'w': 1, 'o': 1}.
Diese beiden können durch eine Frequenzkarte von Zeichenfolgen generiert werden, daher addieren wir diese Zahlen zum Ergebnis.
Abschließend wird das Ergebnis ausgegeben: „Die durcheinandergebrachten Ziffern in der Zeichenfolge sind: 1 2“.
Diese Frage zeigt, wie wir die Frequenzzuordnung verwenden können, um komplexe String-Manipulationsprobleme in C++ zu lösen. Dies ist eine großartige Frage, um Ihre Fähigkeiten im Umgang mit Zeichenfolgen und Datenstrukturen zu üben. Üben Sie weiterhin Fragen wie diese, um Ihre C++-Programmierkenntnisse zu verbessern.
Das obige ist der detaillierte Inhalt vonGegeben sei eine Zeichenfolge, in der Buchstaben verschlüsselte Zahlen darstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!