Dans l'article d'aujourd'hui, nous aborderons un problème unique lié aux opérations sur les chaînes en C++. Cette question est "Dans la chaîne donnée, l'expression alphabétique est constituée de nombres brouillés." Cette question peut constituer un bon exercice pour améliorer vos compétences en matière de manipulation de chaînes et de structure de données en C++.
À partir d'une chaîne, la tâche consiste à identifier les nombres dans lesquels les expressions de lettres sont brouillées. Par exemple, si la chaîne d'entrée est "oentow", elle contient une représentation alphabétique du chiffre 2 (t, w, o) et du chiffre 1 (o, n, e) brouillés.
Pour résoudre ce problème, nous utiliserons une table de hachage ou une carte non ordonnée en C++ pour stocker la fréquence des lettres dans la chaîne. Nous comparerons ensuite cette carte de fréquence à une carte prédéfinie de la représentation alphabétique de chaque nombre. Si une représentation d'un nombre peut être formée à partir de la chaîne d'entrée, nous afficherons ce nombre.
La traduction chinoise deVoici le code C++ pour résoudre le problème −
#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
Considérons la chaîne "oentow".
Lorsque cette chaîne est transmise à la fonction findJumbledDigits, elle génère d'abord une carte de fréquence pour la chaîne : {'o' : 2, 'e' : 1, 'n' : 1, 't' : 1, 'w' : 1}.
Ensuite, pour chaque nombre de 0 à 9, il génère une carte de fréquence de la représentation alphabétique du nombre et vérifie si cette carte peut être formée à partir de la carte de fréquence de la chaîne.
La représentation "un" du chiffre 1 a la cartographie de fréquence {'o' : 1, 'n' : 1, 'e' : 1}, tandis que la représentation "deux" du chiffre 2 a la cartographie de fréquence {' t' : 1 , 'w' : 1, 'o' : 1}.
Ces deux peuvent être générés par une carte de fréquence de chaînes, nous ajoutons donc ces nombres au résultat.
Enfin, il affiche le résultat : "Les chiffres brouillés dans la chaîne sont : 1 2".
Cette question montre comment nous pouvons utiliser le mappage de fréquence pour résoudre des problèmes complexes de manipulation de chaînes en C++. C'est une excellente question pour mettre en pratique vos compétences en matière de gestion des chaînes et des structures de données. Continuez à pratiquer des questions comme celle-ci pour améliorer vos compétences en codage C++.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!