Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนคำที่มีอยู่ในประโยคที่กำหนดทั้งหมดใน C++


เราได้รับหลายประโยคในรูปแบบของสตริง เป้าหมายคือการนับจำนวนคำที่มีอยู่ในทุกประโยค

หมายเหตุ − คำที่มีอักษรตัวพิมพ์เล็กทั้งหมดจะพิจารณาเท่านั้น

ถ้าประโยคคือ −

“ ฉันกำลังเรียนภาษาซี ”

“ การเรียนรู้สิ่งใหม่ๆ เป็นเรื่องง่าย “

“ เด็ก ๆ กำลังเรียนรู้นิสัยที่ดีต่อสุขภาพ “

มีเพียง "การเรียนรู้" เท่านั้นที่มีอยู่ในทั้งสาม นับเป็น 1

ให้เราเข้าใจด้วยตัวอย่าง

ป้อนข้อมูล − “เสื้อผ้าแห้ง”, “เด็กๆ เล่นกันหมด”, “นั่นเป็นวันที่ดีที่สุด”

ผลผลิต − จำนวนคำที่มีอยู่ในประโยคที่กำหนดทั้งหมดคือ − 2

คำอธิบาย − คำว่า “the” และ “were” มีอยู่ในทุกประโยค

ป้อนข้อมูล − “เรากำลังจะไปโรงเรียน”, “ถ้าคุณยินดีก็ไปต่อ”, “ขายหมดแล้ว”

ผลผลิต − จำนวนคำที่มีอยู่ในประโยคที่กำหนดทั้งหมดคือ − 1

คำอธิบาย − คำว่า “เป็น” มีอยู่ในทุกประโยค

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

ในแนวทางนี้ ก่อนอื่นเราจะเก็บคำศัพท์ของประโยคแรกไว้ใน vector> set

เราจะค้นหาคำในชุดเวกเตอร์ในประโยคอื่นๆ ทั้งหมดโดยใช้การตรวจสอบ unordered_map

  • หา vector vec. และเริ่มต้นด้วยสตริงทั้งหมดที่มีประโยค

  • จำนวนประโยคจะเป็น vec.size()

  • ฟังก์ชัน word_sentences(vector vec, int size) ใช้เวกเตอร์ของประโยคและขนาดและคืนค่าจำนวนคำที่มีอยู่ในประโยคที่กำหนดทั้งหมด

  • นับเริ่มต้นเป็น 0

  • ใช้ str สตริงชั่วคราวเพื่อเก็บคำแต่ละคำในประโยค

  • ข้ามประโยคแรกที่เก็บไว้ใน vec[0] โดยใช้ while loop

  • ข้างในโดยใช้ while loop อื่น ให้แยกแต่ละคำใน str[] จนกว่าจะพบช่องว่าง

  • ตอนนี้เรามีคำของประโยคแรกใน str แล้ว ให้เพิ่มคู่ของ (str,true) เข้าไปในเซต

  • ทำสิ่งนี้กับทุกคำในประโยคที่เก็บไว้ใน vec[0].

  • ชุดเวกเตอร์ตอนนี้มีคู่ของคำทั้งหมดในประโยคแรกที่มีค่าจริง

  • เวกเตอร์การเคลื่อนที่ของประโยคจากประโยคที่ 2 ถึงประโยคสุดท้ายโดยใช้ for loop จาก j=1 ถึง j

  • แยกแต่ละคำออกจากประโยคปัจจุบันใน vec[j] และเก็บไว้ใน str.

  • ทำเครื่องหมายคำเหล่านี้ว่าเป็นจริงในการตรวจสอบแผนที่โดยใช้ check[str]=true.

  • ทำสิ่งนี้กับทุกคำในประโยคปัจจุบันใน vec[j].

  • ใช้ for loop, traverse vector set และสำหรับประโยคปัจจุบัน ให้ค้นหาว่าคำเหล่านี้อยู่ในชุดหรือไม่

  • ใช้ for loop กำหนดเวกเตอร์การเคลื่อนที่อีกครั้ง

  • หากคำปัจจุบันปรากฏในประโยคทั้งหมด set[k].second จะเป็นจริง ถ้าใช่ ให้นับเพิ่ม

  • ในตอนท้ายเราจะนับตัวแปรด้วยคำที่เกิดขึ้นในทุกประโยค

  • ผลตอบแทนนับเป็นผลลัพธ์

ตัวอย่าง

#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