Maison >développement back-end >C++ >Imprimer toutes les chaînes d'un tableau donné qui apparaissent comme sous-chaînes dans une chaîne donnée en utilisant C++

Imprimer toutes les chaînes d'un tableau donné qui apparaissent comme sous-chaînes dans une chaîne donnée en utilisant C++

王林
王林avant
2023-08-29 13:01:03822parcourir

Imprimer toutes les chaînes dun tableau donné qui apparaissent comme sous-chaînes dans une chaîne donnée en utilisant C++

Dans le monde de la programmation, il existe de nombreux scénarios dans lesquels nous souhaitons vraiment rechercher des modèles spécifiques dans un texte plus grand. Une tâche courante consiste à rechercher et à imprimer chaque chaîne d'un tableau donné qui apparaît comme sous-chaîne dans une chaîne donnée. Ce problème apparemment fondamental peut être résolu en utilisant diverses méthodes, et dans cet article nous en explorerons deux. Nous fournissons une explication claire de la syntaxe et des algorithmes utilisés pour chaque méthode et fournissons deux exemples complets de code exécutable.

Grammaire

Avant de présenter les méthodes, comprenons d'abord la syntaxe que nous utiliserons pour résoudre ce problème -

void printMatchingStrings(string array[], string text);

Algorithme

Pour résoudre le problème de la recherche et de l'impression de toutes les chaînes qui apparaissent comme sous-chaînes dans une chaîne donnée à partir d'un tableau, nous pouvons suivre l'algorithme étape par étape suivant -

  • Initialisez un vecteur vide pour stocker les chaînes correspondantes.

  • Répétez chaque chaîne du tableau.

  • Vérifiez si la chaîne actuelle est une sous-chaîne du texte donné.

  • L'hypothèse est d'ajouter une chaîne à un vecteur de chaînes correspondantes.

  • Après avoir parcouru toutes les chaînes, imprimez le vecteur des chaînes correspondantes.

Méthode 1 : utilisez la fonction string.find()

Dans cette technique, nous utiliserons la fonction string.find() qui renvoie la position d'une sous-chaîne dans une chaîne. Si la sous-chaîne n'est pas trouvée, elle renvoie une valeur spéciale appelée string :: npos.

Exemple

#include <iostream>
#include <vector>
#include <string>

void printMatchingStrings(const std::string array[], const std::string& text, int arraySize) {
   std::vector<std::string> matchingStrings;

   for (int i = 0; i < arraySize; i++) {
      if (text.find(array[i]) != std::string::npos) {
         matchingStrings.push_back(array[i]);
      }
   }

   for (const std::string& match : matchingStrings) {
      std::cout << match << std::endl;
   }
}

int main() {
   const std::string array[] = { "apple", "banana", "orange", "pear" };
   const std::string text = "I like to eat bananas and oranges.";

   int arraySize = sizeof(array) / sizeof(array[0]);

   printMatchingStrings(array, text, arraySize);

   return 0;
}

Sortie

banana
orange

Méthode 2 : Utiliser des expressions régulières

Les expressions régulières fournissent des outils puissants pour la correspondance de modèles dans les chaînes. Nous pouvons également les utiliser pour résoudre nos problèmes.

Exemple

#include <iostream>
#include <vector>
#include <string>
#include <regex>

void printMatchingStrings(const std::string array[], const std::string& text, int arraySize) {
   std::vector<std::string> matchingStrings;

   for (int i = 0; i < arraySize; i++) {
      std::regex pattern(array[i]);

      if (std::regex_search(text, pattern)) {
         matchingStrings.push_back(array[i]);
      }
   }

   for (const std::string& match : matchingStrings) {
      std::cout << match << std::endl;
   }
}

int main() {
   const std::string array[] = { "apple", "banana", "orange", "pear" };
   const std::string text = "I like to eat bananas and pear.";

   int arraySize = sizeof(array) / sizeof(array[0]);

   printMatchingStrings(array, text, arraySize);

   return 0;
}

Sortie

banana
pear

Choisissez la bonne méthode

Le choix entre les deux méthodes dépend des exigences de votre problème spécifique−

Utilisez la méthode string.find() si

Le motif à faire correspondre est relativement simple.

Les performances sont un problème car la méthode string.find() peut être plus rapide que les expressions régulières pour les modèles simples.

Vous préférez une implémentation plus simple sans avoir besoin de syntaxe d'expression régulière.

Utilisez la méthode d'expression régulière si

Le modèle à faire correspondre est complexe et nécessite des capacités avancées de correspondance de modèles.

La flexibilité et une correspondance de modèles puissante sont importantes.

Les performances ne sont pas un facteur critique, ou la complexité du modèle justifie l'utilisation d'expressions régulières.

Conclusion

Dans cet article, nous avons examiné deux manières uniques de gérer le problème de la recherche et de l'impression de l'occurrence d'une sous-chaîne dans une chaîne donnée dans un tableau. La méthode main utilise la fonction string.find(), qui est une solution simple et directe. Les méthodes ultérieures ont exploité la puissance des expressions régulières pour gérer des situations de correspondance de modèles plus complexes. En fonction des besoins de votre problème spécifique, vous pouvez choisir la méthode la plus appropriée. N'oubliez pas que la correspondance de modèles est une tâche fondamentale en programmation et qu'une solide compréhension de diverses méthodes et stratégies peut améliorer considérablement vos capacités de résolution de problèmes. Ainsi, la prochaine fois que vous rencontrerez un problème similaire, vous disposerez de suffisamment de connaissances pour le gérer efficacement.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer