문자열의 형태로 여러 문장이 주어집니다. 목표는 모든 문장에 존재하는 단어의 수를 세는 것입니다.
참고 - 모든 소문자를 포함하는 단어만 고려됩니다.
문장이 -
인 경우" 저는 C 언어를 배우고 있습니다 "
" 새로운 것을 배우는 것은 쉽습니다 "
" 건강한 습관을 배우는 아이들 "
세 가지 모두에 "배움"만이 존재합니다. 따라서 개수는 1입니다.
예를 들어 이해하자
입력 - "옷이 말랐다", "아이들이 다 놀고 있었다", "그때가 최고의 날이었다"
출력 − 주어진 모든 문장에 존재하는 단어의 수는 − 2
설명 − 모든 문장에 "the"와 "were"라는 단어가 있습니다.
입력 − "학교에 갈거야", "당신이 원한다면 계속하세요", "이 모든 것이 팔렸습니다"
출력 − 주어진 모든 문장에 존재하는 단어의 수는 − 1
설명 − 모든 문장에 "are"라는 단어가 있습니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
이 접근 방식에서 우리는 먼저 vector
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