복습: 단어 빈도수 카운터
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 63번째.
챌린지
쉬움텍스트 입력을 분석하기 위해 단어 빈도수 카운터를 구현하는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 다음과 같은 기능을 가진
countWordOccurrences함수를 작성합니다:- 두 개의
char*매개변수sentence와targetWord를 받습니다. - 문장에서 대상 단어가 나타나는 횟수를 나타내는 정수를 반환합니다.
- 루프를 사용하여 문장을 문자 단위로 처리합니다.
- 공백을 구분자로 사용하여 단어 경계를 식별합니다.
- 문장에서 각 단어를 추출하고
strcmp()를 사용하여 대상 단어와 비교합니다. - 정확히 일치하는 항목을 계산합니다 (대소문자 구분 비교).
- 두 개의
- 다음과 같은 기능을 가진
extractWord함수를 작성합니다:char*sentence, 정수startIndex, 그리고char*word 매개변수를 받습니다.- 추출된 단어 뒤의 인덱스를 나타내는 정수를 반환합니다.
startIndex부터 시작하여 공백이나 널 종료 문자(null terminator)를 만날 때까지 단일 단어를 추출합니다.- 추출된 단어를
word매개변수에 저장합니다. - 추출된 단어를 완성하기 위해 널 종료 문자를 추가합니다.
- 다음과 같은 기능을 가진
analyzeText함수를 작성합니다:char*sentence 매개변수를 받습니다.- 문장의 총 단어 수를 나타내는 정수를 반환합니다.
- 공백을 구분자로 식별하여 단어 수를 셉니다.
- 여러 개의 연속된 공백을 올바르게 처리합니다 (단일 구분자로 취급).
- main 함수에서:
- 크기가 200인 문자 배열
inputSentence를 선언합니다. - 크기가 50인 문자 배열
searchWord를 선언합니다. - 입력으로부터 문장을 읽습니다 (공백으로 구분된 여러 단어가 포함될 수 있음).
- 검색할 대상 단어를 읽습니다.
analyzeText함수를 호출하고 총 단어 수를 다음 형식으로 출력합니다:Total words: [count]countWordOccurrences함수를 호출하고 결과를 다음 형식으로 출력합니다:Occurrences of '[searchWord]': [count]- 단어 빈도를 백분율로 계산하여 소수점 첫째 자리까지 다음 형식으로 출력합니다:
Frequency: [percentage]% - 빈도 카테고리를 결정하고 출력합니다:
- 빈도가 0.0%인 경우:
Category: Not found를 출력합니다. - 빈도가 0.0%보다 크고 20.0%보다 작은 경우:
Category: Rare를 출력합니다. - 빈도가 20.0%에서 50.0% 사이(포함)인 경우:
Category: Common을 출력합니다. - 빈도가 50.0%보다 큰 경우:
Category: Frequent를 출력합니다.
- 빈도가 0.0%인 경우:
- 크기가 200인 문자 배열
이 챌린지는 문자열 조작, 토큰화 및 텍스트 처리 능력을 테스트합니다. 문장을 개별 단어로 분리하고, 문자열이 정확히 일치하는지 비교하며, 텍스트 데이터를 분석하기 위해 함께 작동하는 여러 함수를 구현하는 연습을 하게 됩니다. 이 프로그램은 많은 C 애플리케이션에 필수적인 실제 텍스트 처리 기술을 보여줍니다.
직접 해보기
#include <stdio.h>
#include <string.h>
// TODO: 여기에 extractWord 함수를 작성하세요
// TODO: 여기에 countWordOccurrences 함수를 작성하세요
// TODO: 여기에 analyzeText 함수를 작성하세요
int main() {
char inputSentence[200];
char searchWord[50];
// 입력 문장 읽기
fgets(inputSentence, sizeof(inputSentence), stdin);
// 줄바꿈 문자가 있는 경우 제거
inputSentence[strcspn(inputSentence, "\n")] = '\0';
// 검색할 단어 읽기
scanf("%s", searchWord);
// TODO: 아래에 코드를 작성하세요
// analyzeText 함수를 호출하고 총 단어 수를 저장하세요
// countWordOccurrences 함수를 호출하고 발생 횟수를 저장하세요
// 빈도 백분율을 계산하세요
// 빈도 범주를 결정하세요
// 요구된 형식으로 결과 출력
// printf("Total words: %d\n", totalWords);
// printf("Occurrences of '%s': %d\n", searchWord, occurrences);
// printf("Frequency: %.1f%%\n", frequency);
// printf("Category: %s\n", category);
return 0;
}