복습 - 단어 빈도
Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 104개 중 75번째.
챌린지
쉬움텍스트를 처리하고 빈도순으로 정렬된 단어 수를 표시하는 단어 빈도 분석기(Word Frequency Analyzer)를 만들어 보겠습니다. 이것은 여러분이 배운 모든 STL 구성 요소인 카운팅을 위한 map, 정렬을 위한 vector, 순회를 위한 반복자(iterator), 그리고 사용자 정의 정렬 로직을 위한 람다(lambda)를 한데 모으는 전형적인 텍스트 처리 작업입니다.
코드는 두 개의 파일로 구성됩니다:
WordAnalyzer.h: 단어 카운팅 및 분석을 관리하는WordAnalyzer클래스를 정의합니다.클래스 내부에서 단어 수를 저장하기 위해
std::map<std::string, int>를 사용해야 합니다. 다음 메서드들을 구현하세요:addWord(const std::string& word)— 주어진 단어의 카운트를 증가시킵니다.getCount(const std::string& word)— 특정 단어의 카운트를 반환합니다 (찾지 못한 경우 0).getTotalWords()— 추가된 총 단어 수를 반환합니다 (모든 카운트의 합).getUniqueWords()— 고유 단어의 수를 반환합니다 (맵의 크기).printByFrequency()— 모든 단어를 빈도 내림차순으로 정렬하여 출력합니다. 빈도가 같은 단어의 경우 알파벳순으로 정렬합니다. 각 줄은word: count형식으로 표시해야 합니다.
printByFrequency()의 경우, 맵의 내용을 pair의 벡터로 옮긴 다음, 카운트를 먼저 비교(내림차순)하고, 동일한 경우 단어를 비교(오름차순)하는 람다와 함께std::sort를 사용해야 합니다.main.cpp: 첫 번째 줄에서 다음에 올 단어의 개수를 나타내는 정수n을 읽습니다. 그런 다음 한 줄에 하나씩n개의 단어를 읽습니다.WordAnalyzer를 생성하고 모든 단어를 추가한 후 다음을 표시합니다:Total words: <count>출력Unique words: <count>출력Word frequencies:출력 후printByFrequency()호출
예를 들어, 다음과 같은 입력이 주어지면:
7
apple
banana
apple
cherry
banana
apple
date출력은 다음과 같아야 합니다:
Total words: 7
Unique words: 4
Word frequencies:
apple: 3
banana: 2
cherry: 1
date: 1apple이 가장 먼저 나타나고(가장 높은 빈도), 그 다음에 banana가 오며, cherry와 date는 카운트가 같으므로 알파벳순으로 정렬된 것에 주목하세요.
또 다른 입력 예시:
5
the
cat
the
sat
the출력:
Total words: 5
Unique words: 3
Word frequencies:
the: 3
cat: 1
sat: 1직접 해보기
#include <iostream>
#include <string>
#include "WordAnalyzer.h"
using namespace std;
int main() {
int n;
cin >> n;
WordAnalyzer analyzer;
// TODO: n개의 단어를 읽고 analyzer에 추가하기
// TODO: "Total words: <count>" 출력하기
// TODO: "Unique words: <count>" 출력하기
// TODO: "Word frequencies:"를 출력하고 printByFrequency() 호출하기
return 0;
}