Maison > développement back-end > C++ > Étant donné une chaîne dans laquelle les lettres représentent des nombres brouillés

Étant donné une chaîne dans laquelle les lettres représentent des nombres brouillés

WBOY
Libérer: 2023-09-11 20:37:02
avant
825 Les gens l'ont consulté

Étant donné une chaîne dans laquelle les lettres représentent des nombres brouillés

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

Énoncé du problème

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

Méthode de solution C++

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 de

Exemple

est :

Exemple

Voici 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;
}
Copier après la connexion

Sortie

The jumbled digits in the string are: 1 2 
Copier après la connexion

Explication avec un cas de test

se traduit par :

Explication avec un cas de test

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

Conclusion

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!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal