C++中計算所有給定句子中都存在的單詞數量


我們得到多個以字串形式表示的句子。目標是計算存在於所有句子中的單詞數量。

注意 − 只考慮包含全小寫字母的單詞

如果句子是:

“我正在學習C語言”

“學習新事物很容易”

“孩子們正在學習健康習慣”

只有“學習”存在於所有三個句子中。所以計數是1。

讓我們透過例子來理解

輸入 − “衣服是乾的”, “所有孩子都在玩”, “那些是最好的日子”

輸出 − 存在於所有給定句子中的單詞數量為:2

解釋 − 單詞“the”和“were”存在於所有句子中。

輸入 − “我們要去學校”, “如果你願意,就繼續”, “所有這些都賣掉了”

輸出 − 存在於所有給定句子中的單詞數量為:1

解釋 − 單詞“are”存在於所有句子中。

下面程式中使用的演算法如下

在這個方法中,我們首先將第一個句子的單詞儲存在vector<pair<string, bool>>集合中。

我們將使用unordered_map<string, bool> check來查詢在其他所有句子中都存在的單詞。

  • 使用vector<string> vec。並用包含句子的所有字串初始化它。

  • 句子的數量將是vec.size()。

  • 函式words_sentences(vector<string> vec, int size)接收句子向量和大小,並返回存在於所有給定句子中的單詞數量

  • 將初始計數設定為0。

  • 使用臨時字串str來儲存句子中的單個單詞。

  • 使用while迴圈遍歷儲存在vec[0]中的第一個句子。

  • 在其中使用另一個while迴圈,提取str[]中的單個單詞,直到遇到空格。

  • 現在我們在str中有了第一個句子的一個單詞,向集合中新增一對(str,true)。

  • 對儲存在vec[0]中的句子中的所有單詞執行此操作。

  • 向量集合現在包含第一個句子中所有單詞與true值的配對。

  • 使用for迴圈從第二個句子遍歷到最後一個句子(j=1到j<size)。

  • 從vec[j]中的當前句子中提取每個單詞並存儲在str中。

  • 使用check[str]=true在對映check中將這些單詞標記為true。

  • 對vec[j]中當前句子中的所有單詞執行此操作。

  • 使用for迴圈遍歷向量集合,並對於當前句子查詢這些單詞是否也在集合中。

  • 再次使用for迴圈遍歷向量集合。

  • 如果當前單詞出現在所有句子中,則set[k].second將為true。如果是,則遞增計數。

  • 最後,變數count將包含出現在所有句子中的單詞。

  • 返回count作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int words_sentences(vector<string> vec, int size){
   int count = 0;
   int i = 0;
   string str;
   unordered_map<string, bool> check;
   vector<pair<string, bool>> set ;
   pair<string, bool> str_bool;
   while (i < vec[0].size()){
      str = "";
      while (i < vec[0].size() && vec[0][i] != ' '){
         str += vec[0][i];
         i++;
      }
      i++;
      if (str != ""){
         str_bool = make_pair(str, true);
         set.push_back(str_bool);
      }
   }
   for (int j = 1; j < size; j++){
      check.clear();
      i = 0;
      while (i < vec[j].size()){
         str = "";
         while (i < vec[j].size() && vec[j][i] != ' '){
            str += vec[j][i];
            i++;
         }
         i++;
         if (str != ""){
            check[str] = true;
         }
      }
      for(int k = 0; k < set.size(); k++){
         if (set[k].second != false && check[set[k].first] == false){
            set[k].second = false;
         }
         else if (set[k].second != false && check[set[k].first] == true){
            check[set[k].first] = false;
         }
      }
   }
   for (int k = 0; k < set.size(); k++){
      if (set[k].second == true){
         count++;
      }
   }
   return count;
}
int main(){
   vector<string> vec;
   vec.push_back("Honesty is the best policy");
   vec.push_back("policy varies from company to company");
   vec.push_back("Employee should follow the policy of a company");
   int size = vec.size();
   cout<<"Count of words that are present in all the given sentences are: "<<words_sentences(vec, size);
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Count of words that are present in all the given sentences are: 1

更新於:2020年12月3日

189 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始
廣告