Heim  >  Artikel  >  Backend-Entwicklung  >  Geben Sie mit C++ alle Zeichenfolgen in einem bestimmten Array aus, die als Teilzeichenfolgen in einer bestimmten Zeichenfolge vorkommen

Geben Sie mit C++ alle Zeichenfolgen in einem bestimmten Array aus, die als Teilzeichenfolgen in einer bestimmten Zeichenfolge vorkommen

王林
王林nach vorne
2023-08-29 13:01:03748Durchsuche

Geben Sie mit C++ alle Zeichenfolgen in einem bestimmten Array aus, die als Teilzeichenfolgen in einer bestimmten Zeichenfolge vorkommen

In der Welt des Programmierens gibt es viele Szenarien, in denen wir wirklich nach bestimmten Mustern in größeren Texten suchen möchten. Eine häufige Aufgabe besteht darin, jede Zeichenfolge in einem bestimmten Array zu finden und auszugeben, die als Teilzeichenfolge innerhalb einer bestimmten Zeichenfolge auftritt. Dieses scheinbar grundlegende Problem kann mit verschiedenen Methoden gelöst werden. In diesem Artikel werden wir zwei davon untersuchen. Wir bieten eine klare Erklärung der Syntax und der Algorithmen, die für jede Methode verwendet werden, und stellen zwei vollständige Beispiele für ausführbaren Code bereit.

Grammatik

Bevor wir die Methoden vorstellen, wollen wir zunächst die Syntax verstehen, die wir zur Lösung dieses Problems verwenden werden -

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

Algorithmus

Um das Problem zu lösen, alle Zeichenfolgen zu finden und auszugeben, die als Teilzeichenfolgen in einer bestimmten Zeichenfolge aus einem Array vorkommen, können wir dem folgenden Schritt-für-Schritt-Algorithmus folgen –

  • Initialisieren Sie einen leeren Vektor, um passende Zeichenfolgen zu speichern.

  • Wiederholen Sie jede Zeichenfolge im Array.

  • Überprüfen Sie, ob die aktuelle Zeichenfolge eine Teilzeichenfolge des angegebenen Textes ist.

  • Die Hypothese lautet: Fügen Sie eine Zeichenfolge zu einem Vektor passender Zeichenfolgen hinzu.

  • Nachdem Sie alle Zeichenfolgen durchlaufen haben, drucken Sie den Vektor der übereinstimmenden Zeichenfolgen aus.

Methode 1: Verwenden Sie die Funktion string.find()

In dieser Technik verwenden wir die Funktion string.find(), die die Position eines Teilstrings in einem String zurückgibt. Wenn die Teilzeichenfolge nicht gefunden wird, wird ein spezieller Wert namens string::npos zurückgegeben.

Beispiel

#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;
}

Ausgabe

banana
orange

Methode 2: Verwenden Sie reguläre Ausdrücke

Reguläre Ausdrücke bieten leistungsstarke Werkzeuge für den Mustervergleich in Zeichenfolgen. Wir können sie auch nutzen, um unsere Probleme zu lösen.

Beispiel

#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;
}

Ausgabe

banana
pear

Wählen Sie die richtige Methode

Die Wahl zwischen den beiden Methoden hängt von den Anforderungen Ihres spezifischen Problems ab −

Verwenden Sie die Methode string.find(), wenn

Das Muster, das angepasst werden muss, ist relativ einfach.

Die Leistung stellt ein Problem dar, da die Methode string.find() für einfache Muster möglicherweise schneller ist als reguläre Ausdrücke.

Sie bevorzugen eine einfachere Implementierung ohne die Notwendigkeit einer regulären Ausdruckssyntax.

Verwenden Sie die reguläre Ausdrucksmethode, wenn

Das abzugleichende Muster ist komplex und erfordert erweiterte Musterabgleichsfunktionen.

Flexibilität und leistungsstarker Mustervergleich sind wichtig.

Leistung ist kein kritischer Faktor, oder die Komplexität des Musters rechtfertigt die Verwendung regulärer Ausdrücke.

Fazit

In diesem Artikel haben wir uns zwei einzigartige Möglichkeiten angesehen, mit dem Problem umzugehen, das Vorkommen eines Teilstrings in einem bestimmten String in einem Array zu finden und auszudrucken. Die Hauptmethode verwendet die Funktion string.find(), eine einfache und unkomplizierte Lösung. Nachfolgende Methoden nutzten die Leistungsfähigkeit regulärer Ausdrücke, um komplexere Mustervergleichssituationen zu bewältigen. Abhängig von den Anforderungen Ihres spezifischen Problems können Sie die am besten geeignete Methode auswählen. Denken Sie daran, dass der Mustervergleich eine grundlegende Aufgabe beim Programmieren ist und dass ein umfassendes Verständnis verschiedener Methoden und Strategien Ihre Fähigkeiten zur Problemlösung erheblich verbessern kann. Wenn Sie also das nächste Mal auf ein ähnliches Problem stoßen, verfügen Sie über genügend Wissen, um es effektiv zu lösen.

Das obige ist der detaillierte Inhalt vonGeben Sie mit C++ alle Zeichenfolgen in einem bestimmten Array aus, die als Teilzeichenfolgen in einer bestimmten Zeichenfolge vorkommen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen