Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 모든 문장에 존재하는 단어 수

<시간/>

문자열의 형태로 여러 문장이 주어집니다. 목표는 모든 문장에 존재하는 단어의 수를 세는 것입니다.

참고 - 모든 소문자를 포함하는 단어만 고려됩니다.

문장이 -

인 경우

" 저는 C 언어를 배우고 있습니다 "

" 새로운 것을 배우는 것은 쉽습니다 "

" 건강한 습관을 배우는 아이들 "

세 가지 모두에 "배움"만이 존재합니다. 따라서 개수는 1입니다.

예를 들어 이해하자

입력 - "옷이 말랐다", "아이들이 다 놀고 있었다", "그때가 최고의 날이었다"

출력 − 주어진 모든 문장에 존재하는 단어의 수는 − 2

설명 − 모든 문장에 "the"와 "were"라는 단어가 있습니다.

입력 − "학교에 갈거야", "당신이 원한다면 계속하세요", "이 모든 것이 팔렸습니다"

출력 − 주어진 모든 문장에 존재하는 단어의 수는 − 1

설명 − 모든 문장에 "are"라는 단어가 있습니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

이 접근 방식에서 우리는 먼저 vector> set에 첫 번째 문장의 단어를 저장할 것입니다.

unordered_map 검사를 사용하여 다른 모든 문장의 벡터 집합에서 단어를 찾습니다.

  • vector vec를 사용합니다. 그리고 문장이 포함된 모든 문자열로 초기화합니다.

  • 문장 수는 vec.size()입니다.

  • 함수 words_sentences(vector vec, int size)는 문장과 크기의 벡터를 가져와서 주어진 모든 문장에 있는 단어 수를 반환합니다.

  • 초기 카운트를 0으로 합니다.

  • 문장의 개별 단어를 저장하려면 임시 문자열 str을 사용하십시오.

  • while 루프를 사용하여 vec[0]에 저장된 첫 번째 문장을 탐색합니다.

  • 다른 while 루프를 사용하여 그 안에서 공백이 발생할 때까지 str[]에서 개별 단어를 추출합니다.

  • 이제 str에 첫 번째 문장의 단어가 있으므로 집합에 (str,true) 쌍을 추가합니다.

  • vec[0]에 저장된 문장의 모든 단어에 대해 이 작업을 수행합니다.

  • 벡터 세트는 이제 참값을 갖는 첫 번째 문장의 모든 단어 쌍을 갖습니다.

  • j=1에서 j까지 for 루프를 사용하여 두 번째 문장에서 마지막 문장까지 문장의 벡터 순회

  • vec[j]의 현재 문장에서 각 단어를 추출하고 str에 저장합니다.

  • check[str]=true를 사용하여 지도 검사에서 이 단어를 true로 표시합니다.

  • vec[j]의 현재 문장에 있는 모든 단어에 대해 이 작업을 수행합니다.

  • for 루프를 사용하여 벡터 집합을 탐색하고 현재 문장에 대해 검사한 단어가 집합에도 있는지 찾습니다.

  • for 루프를 사용하여 벡터 세트를 다시 순회합니다.

  • 현재 단어가 모든 문장에 나타나면 set[k].second가 true가 됩니다. 예인 경우 카운트를 증가시킵니다.

  • 마지막에는 모든 문장에서 단어가 나오는 변수 개수를 갖게 됩니다.

  • 결과로 카운트를 반환합니다.

예시

#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