문자열의 형태로 여러 문장이 주어집니다. 목표는 모든 문장에 존재하는 단어의 수를 세는 것입니다.
참고 - 모든 소문자를 포함하는 단어만 고려됩니다.
문장이 -
인 경우" 저는 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