首頁  >  文章  >  後端開發  >  使用C++列印出給定字串中作為子字串出現的給定數組中的所有字串

使用C++列印出給定字串中作為子字串出現的給定數組中的所有字串

王林
王林轉載
2023-08-29 13:01:03791瀏覽

使用C++列印出給定字串中作為子字串出現的給定數組中的所有字串

在程式設計世界中,有許多場景我們確實希望在較大的文字中尋找特定的模式。一項常見任務是尋找並列印給定數組中作為給定字串中的子字串出現的每個字串。這個看似基本的問題可以利用各種方法來解決,在本文中,我們將探討其中的兩種方法。我們將對每種方法所使用的語法和演算法進行明確的說明,並提供兩個完整的可執行程式碼範例。

文法

在我們介紹這些方法之前,讓我們先了解我們將用來解決這個問題的語法 -

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

演算法

為了解決從數組中尋找並列印給定字串中作為子字串出現的所有字串的問題,我們可以遵循以下分步演算法 -

  • 初始化一個空向量來儲存匹配的字串。

  • 在陣列中重複每個字串。

  • 檢查目前字串是否是給定文字的子字串。

  • 假設是,將字串加入到符合字串的向量中。

  • 在遍歷所有字串後,列印符合字串的向量。

方法一:使用 string.find() 函數

在此技術中,我們將使用 string.find() 函數,該函數傳回字串中子字串的位置。如果沒有找到子字串,它會傳回一個名為 string::npos 的特殊值。

範例

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

輸出

banana
orange

方法 2:使用正規表示式

正規表示式為字串中的模式匹配提供了強大的工具。我們也可以利用它們來解決我們的問題。

範例

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

輸出

banana
pear

選擇正確的方法

選擇兩種方法之間取決於您特定問題的要求−

#使用 string.find() 方法,如果

需要匹配的模式比較簡單。

效能是一個問題,因為對於簡單模式, string.find() 方法可能比正規表示式更快。

您喜歡更簡單的實現,而不需要正規表示式語法。

使用正規表示式方法 if

要匹配的模式很複雜,需要進階的模式匹配功能。

靈活性和強大的模式匹配在重要。

效能不是關鍵因素,或者模式的複雜性證明使用正規表示式是合理的。

結論

在本文中,我們探討了兩種獨特的方法來處理在給定字串中尋找和列印出出現為陣列中子字串的問題。主要的方法使用了string.find()函數,這是一個簡單直接的解決方案。後續的方法利用了正規表示式的強大功能來處理更複雜的模式匹配情況。根據您特定問題的需求,您可以選擇最合適的方法。請記住,模式匹配是程式設計中的基本任務,對各種方法和策略有強大的理解能夠顯著提升您的問題解決能力。所以下次遇到類似的問題時,您將有足夠的知識來有效地處理它。

以上是使用C++列印出給定字串中作為子字串出現的給定數組中的所有字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除