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

王林
Libérer: 2023-08-29 13:01:03
avant
824 Les gens l'ont consulté

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

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

Sortie

banana
orange
Copier après la connexion

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

Sortie

banana
pear
Copier après la connexion

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!

É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