Computer >> Máy Tính >  >> Lập trình >> C ++

Số lượng từ có trong tất cả các câu đã cho trong C ++

Chúng tôi được cung cấp nhiều câu ở dạng chuỗi. Mục đích là đếm số từ tồn tại trong tất cả các câu.

Lưu ý - những từ chứa tất cả các chữ cái thường sẽ chỉ được coi là

Nếu câu là -

“Tôi đang học ngôn ngữ C”

“Học những điều mới thật dễ dàng”

“Trẻ em đang học những thói quen lành mạnh“

Chỉ có "học tập" tồn tại trong cả ba. Vì vậy, số đếm là 1.

Hãy cho chúng tôi hiểu với các ví dụ

Đầu vào - “Quần áo đã khô”, “Tất cả bọn trẻ đều đang chơi”, “Đó là những ngày tuyệt vời nhất”

Đầu ra - Số từ có trong tất cả các câu đã cho là - 2

Giải thích - Các từ “the” và “were” có trong tất cả các câu.

Đầu vào - “Chúng ta đang đi học”, “Nếu bạn sẵn sàng thì hãy tiếp tục”, “Tất cả những thứ này đã được bán”

Đầu ra - Số từ có trong tất cả các câu đã cho là - 1

Giải thích - Từ “are” có trong tất cả các câu.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

Trong cách tiếp cận này, trước tiên chúng ta sẽ lưu trữ các từ của câu đầu tiên trong vector > set.

Chúng tôi sẽ tìm các từ trong tập vectơ trong tất cả các câu khác bằng cách sử dụng kiểm tra unsrdered_map .

  • Lấy một vec tơ vec. Và khởi tạo nó bằng tất cả các chuỗi có chứa câu.

  • Số câu sẽ là vec.size ().

  • Hàm words_sentences (vector vec, int size) nhận vectơ của câu và kích thước và trả về số lượng từ có trong tất cả các câu đã cho

  • Lấy số lượng ban đầu là 0.

  • Lấy chuỗi str tạm thời để lưu trữ các từ riêng lẻ trong một câu.

  • Đảo ngược câu đầu tiên được lưu trữ trong vec [0] bằng vòng lặp while.

  • Bên trong nó bằng cách sử dụng một vòng lặp while khác, trích xuất một từ riêng lẻ trong str [] cho đến khi gặp khoảng trống.

  • Bây giờ chúng ta có một từ của câu đầu tiên trong str, hãy thêm một cặp (str, true) vào tập hợp.

  • Làm điều này cho tất cả các từ trong câu được lưu trữ trong vec [0].

  • Tập hợp vectơ hiện có các cặp tất cả các từ của câu đầu tiên có giá trị true.

  • Vectơ duyệt của các câu từ câu thứ 2 đến câu cuối cùng sử dụng vòng lặp for từ j =1 đến j

  • Trích xuất từng từ trong câu hiện tại trong vec [j] và lưu trữ trong str.

  • Đánh dấu những từ này là đúng trong kiểm tra bản đồ bằng cách sử dụng check [str] =true.

  • Làm điều này cho tất cả các từ trong câu hiện tại trong vec [j].

  • Sử dụng vòng lặp for, tập vectơ đi ngang và cho câu hiện tại để tìm xem những từ được kiểm tra này cũng có trong tập hợp đó hay không.

  • Sử dụng lại vòng lặp for, vectơ đi ngang.

  • Nếu từ hiện tại xuất hiện trong tất cả các câu thì set [k] .second sẽ đúng. Nếu có, số lượng tăng dần.

  • Cuối cùng, chúng ta sẽ có số lượng thay đổi với các từ xuất hiện trong tất cả các câu.

  • Kết quả là số lượt trả lại.

Ví dụ

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

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

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