列印兩個給定句子中所有不重複的單詞


在本教程中,我們將識別並列印兩個給定句子中所有不重複的單詞。不重複的單詞是指在兩個句子中只出現一次的單詞,這意味著它們不會在另一個句子中重複出現。這項任務涉及對輸入句子的分析、單個單詞的識別以及跨兩個句子比較它們以查詢哪些單詞只出現一次。輸出應為所有此類單詞的列表。這項任務可以透過各種程式設計方法來完成,例如使用迴圈、陣列或字典。

方法

以下是列印兩個給定句子中所有不重複單詞的兩種方法:

方法 1:使用字典

方法 2:使用集合

方法 1:使用字典

使用字典,統計每個單詞在兩個短語中出現的次數。然後,我們可以遍歷字典並列印所有隻出現一次的單詞。C++ 中的字典函式通常用於輸出兩個指定句子中所有不重複的單詞。此方法包括使用字典或雜湊表資料結構儲存兩個短語中每個單詞的頻率。然後,我們可以迭代地遍歷字典並打印出只出現一次的術語。

語法

這是在 C++ 中使用字典方法列印兩個給定句子中所有不重複單詞的語法,不包含實際程式碼:

  • 宣告一個字典來儲存單詞頻率

map<string, int> freqDict;
  • 將兩個句子作為字串輸入

string sentence1 = "first sentence";
string sentence2 = "second sentence";
  • 將句子拆分成單詞並將它們插入字典

istringstream iss (sentence1 + " " + sentence2);
string word;
while (iss >> word) {
   freqDict[word]++;
}
  • 遍歷字典並列印不重複的單詞

for (const auto& [word, frequency]: freqDict) {
   if (frequency == 1) {
      cout << word << " ";
   }
}

演算法

在 C++ 中,以下是使用字典方法列印兩個指定句子中所有不重複術語的分步技術:

步驟 1 - 建立兩個字串 s1 和 s2,其中包含句子。

步驟 2 - 宣告空的無序對映 string, int> dict 來記錄句子中每個單詞的頻率。

步驟 3 - 使用 C++ 的字串流類,解析這兩個短語以提取單個單詞。

步驟 4 - 對於每個提取的單詞,檢查它是否出現在 dict 中。如果出現,則將其頻率增加一。否則,將其新增到 dict 中,頻率為 1。

步驟 5 - 處理完兩個句子後,遍歷 dict 並顯示所有頻率為一的術語。這些是不重複的單詞。

步驟 6 - 此方法的時間複雜度為 O(n),

示例 1

此程式碼使用無序對映來儲存組合短語中每個單詞的頻率。然後,它迴圈遍歷對映,將每個只出現一次的單詞新增到不重複單詞的向量中。最後,它釋出不重複的單詞。此示例暗示兩個句子是硬編碼到程式中的,而不是由使用者輸入的。

#include <iostream>
#include <string>
#include <unordered_map>
#include <sstream>
#include <vector>

using namespace std;

vector<string> getNonRepeatingWords(string sentence1, string sentence2) {
   // Combine the two sentences into a single string
   string combined = sentence1 + " " + sentence2;

   // Create a map to store the frequency of each word
   unordered_map<string, int> wordFreq;

   // Use a string stream to extract each word from the combined string
   stringstream ss(combined);
   string word;
   while (ss >> word) {
      // Increment the frequency of the word in the map
      wordFreq[word]++;
   }

   // Create a vector to store the non-repeating words
   vector<string> nonRepeatingWords;
   for (auto& pair : wordFreq) {
      if (pair.second == 1) {
         nonRepeatingWords.push_back(pair.first);
      }
   }

   return nonRepeatingWords;
}
int main() {
   string sentence1 = "The quick brown fox jumps over the lazy dog";
   string sentence2 = "A quick brown dog jumps over a lazy fox";

   vector<string> nonRepeatingWords = getNonRepeatingWords(sentence1, sentence2);

   // Print the non-repeating words
   for (auto& word : nonRepeatingWords) {
      cout << word << " ";
   }
   cout << endl;

   return 0;
}

輸出

a A the The

方法 2:使用集合

此策略包括使用集合來查詢在兩個短語中只出現一次的術語。我們可以為每個短語構建術語集合,然後識別這些集合的交集。最後,我們可以遍歷交集集合並輸出所有隻出現一次的術語。

集合是一個關聯容器,它按排序順序保持不同的元素。我們可以將兩個短語中的術語插入到集合中,任何重複項都將自動刪除。

語法

當然!以下是在 Python 中使用的語法,用於列印兩個給定句子中所有不重複的單詞:

  • 將兩個句子定義為字串

sentence1 = "The fox jumps over dog"
sentence2 = "A dog jumps over fox"
  • 將每個句子拆分成單詞列表

words1 = sentence1.split()
words2 = sentence2.split()
  • 從兩個單詞列表建立集合

set1 = set(words1)
set2 = set(words2)
  • 透過取集合的交集來查詢不重複的單詞

Nonrepeating = set1.symmetric_difference(set2)
  • 列印不重複的單詞

for word in non-repeating:
   print(word)

演算法

按照以下說明使用 C++ 中的集合函式輸出兩個給定句子中所有不重複的單詞:

步驟 1 - 建立兩個字串變數來儲存兩個句子。

步驟 2 - 使用字串流庫,將每個句子拆分成獨立的單詞,並將它們儲存在兩個單獨的陣列中。

步驟 3 - 建立兩個集合,每個句子一個,用於儲存唯一的單詞。

步驟 4 - 遍歷每個單詞陣列並將每個單詞插入到正確的集合中。

步驟 5 - 遍歷每個集合並打印出不重複的單詞。

示例 2

在此程式碼中,我們使用字串流庫將每個句子拆分成單獨的單詞。然後,我們使用兩個集合 uniqueWords1 和 uniqueWords2 來儲存每個句子中唯一的單詞。最後,我們遍歷每個集合並打印出不重複的單詞。

#include <iostream>
#include <string>
#include <sstream>
#include <set>

using namespace std;

int main() {
   string sentence1 = "This is the first sentence.";
   string sentence2 = "This is the second sentence.";
   string word;
   stringstream ss1(sentence1);
   stringstream ss2(sentence2);
   set<string> uniqueWords1;
   set<string> uniqueWords2;

   while (ss1 >> word) {
      uniqueWords1.insert(word);
   }

   while (ss2 >> word) {
      uniqueWords2.insert(word);
   }

   cout << "Non-repeating words in sentence 1:" << endl;
   for (const auto& w : uniqueWords1) {
      if (uniqueWords2.find(w) == uniqueWords2.end()) {
         cout << w << " ";
      }
   }
   cout << endl;

   cout << "Non-repeating words in sentence 2:" << endl;
   for (const auto& w : uniqueWords2) {
      if (uniqueWords1.find(w) == uniqueWords1.end()) {
         cout << w << " ";
      }
   }
   cout << endl;

   return 0;
}

輸出

Non-repeating words in sentence 1:
first 
Non-repeating words in sentence 2:
second

結論

總之,列印兩個給定句子中所有不重複單詞的任務是使用各種程式設計方法實現的,例如將句子分解成單個單詞,使用字典來量化每個單詞的頻率,以及過濾出不重複的單詞。生成的非重複單詞集合可以報告到控制檯,也可以儲存在列表或陣列中以供進一步使用。這項工作對於基本的程式設計文字操作和資料結構操作是有益的練習。

更新於:2023年8月1日

249 次瀏覽

開啟您的職業生涯

完成課程後獲得認證

開始
廣告