首頁 > 後端開發 > C++ > 列印兩個給定句子中所有不重複的單字

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

王林
發布: 2023-09-15 19:01:03
轉載
716 人瀏覽過

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

在本教程中,我們將識別並列印兩個給定句子中所有不重複的單字。不重複的單字指的是兩個句子中只出現一次的單字,也就是它們在另一個句子中不重複出現。這個任務涉及到輸入句子的分析,辨識出各個單詞,並在兩個句子之間進行比較,找出只出現一次的單字。輸出應該是所有這些單字的列表。這個任務可以透過各種程式方法來完成,例如使用循環、陣列或字典。

方法

這裡有兩種方法來印出兩個給定句子中所有不重複的單字−

#方法1:使用字典

方法2:使用集合

方法一:使用字典

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

文法

這裡是沒有實際程式碼的語法,使用 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,用於記錄句子中每個單字的頻率。

第三步 − 使用C 的字串流類,解析兩個短語以提取單字。

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

第5步 - 處理完兩個句子後,迭代字典並顯示頻率為1的所有術語。這些是兩個句子中不重複的單字。

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

Example 1

的中文翻譯為:

範例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 - 遍歷每個集合並列印出不重複的單字。

Example 2

的中文翻譯為:

範例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
登入後複製

结论

总之,从两个提供的句子中打印所有非重复单词的任务是通过使用各种编程方法来实现的,例如将句子分解为单个单词,利用字典来量化每个单词的频率,以及过滤掉非重复单词。生成的非重复单词集合可以报告给控制台或保存在列表或数组中以供进一步使用。这项工作对于基本的编程文本操作和数据结构操作很有帮助。

以上是列印兩個給定句子中所有不重複的單字的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板