Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số từ xuất hiện trong tất cả các câu cho trước trong C++

Cho nhiều câu dưới dạng chuỗi. Mục tiêu là đếm số từ tồn tại trong tất cả các câu.

Lưu ý - chỉ xét các từ chứa toàn bộ chữ cái thường.

Nếu các câu là:

"I am learning C language"
"learning new things is easy"
"Kids are learning healthy habits"

Chỉ "learning" xuất hiện trong cả ba. Số lượng = 1.

Ví dụ

Đầu vào - "The clothes were dry", "All the kids were playing", "Those were the best days"

Đầu ra - Số từ xuất hiện trong tất cả câu là 2

Giải thích - Từ "the" và "were" xuất hiện trong tất cả.

Đầu vào - "We are going to school", "If you are willing then continue", "All these are sold"

Đầu ra - Số từ xuất hiện trong tất cả câu là 1

Giải thích - Từ "are" xuất hiện trong tất cả.

Phương pháp sử dụng

Ta lưu các từ của câu đầu tiên vào vector<pair<string, bool>> set. Tìm các từ trong set này ở tất cả câu khác dùng unordered_map<string, bool> check.

  • Nhập vector vec chứa các câu
  • Số câu = vec.size()
  • Hàm words_sentences(vector<string> vec, int size) trả về số từ chung
  • Khởi tạo count = 0, chuỗi tạm str
  • Duyệt câu đầu vec[0] tách từ (kết thúc bằng khoảng trắng), thêm pair(str, true) vào set
  • Duyệt các câu từ câu 2 đến cuối: tách từ, đánh dấu trong map check
  • Duyệt set: nếu từ không có trong check của câu hiện tại -> set[k].second = false
  • Cuối cùng đếm số set[k].second == true
  • Trả về count

Chương trình minh họa

#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;
    
    // Xử lý câu đầu tiên
    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);
        }
    }
    
    // Xử lý các câu còn lại
    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 << "Số từ xuất hiện trong tất cả các câu là: " << words_sentences(vec, size);
    return 0;
}

Đầu ra

Số từ xuất hiện trong tất cả các câu là: 1