문제 정의
프로그램 실행 중에 사용자로부터 문장을 입력받고, 해당 문장에 포함된 단어들의 평균 길이를 계산하는 프로그램을 작성해야 합니다.
예를 들어 "Tutorials Point is the best resource"라는 문장이 입력되면, 공백으로 구분된 각 단어의 글자 수를 모두 더한 뒤 단어 개수로 나누어 평균 길이를 구하는 방식입니다.
해결 방법
알고리즘
전체적인 처리 흐름은 다음과 같습니다.
START
Step 1: 문자형, 정수형, 실수형 변수 선언
Step 2: 임의의 문장 입력 받기
Step 3: while 루프
조건 (stmt[i]=getchar()) != '\n' 검사
참이면 루프 진입
i 증가 후 Step 5의 함수 호출 준비
Step 4: Step 5 함수에서 반환된 평균 길이 출력
Step 5: calculatewordlength 함수 호출
i. charcount=0, wordcount=1 선언 및 초기화
ii. while 루프
조건 (*stmt != '\n') 검사
참이면 루프 진입
1. if(*stmt != ' ')
2. charcount++;
3. else if(*stmt == ' ')
4. wordcount++;
5. stmt++;
iii. return (double)charcount/wordcount;
STOP핵심 로직 설명
평균 단어 길이를 구하는 원리는 간단합니다. 문장 전체에서 공백이 아닌 문자의 개수를 세고, 공백의 개수 + 1을 단어 개수로 계산한 뒤, 두 값을 나누면 됩니다.
예를 들어 "Hello World"라는 문장은 공백을 제외하면 10글자이고, 공백이 1개이므로 단어는 2개입니다. 따라서 평균 단어 길이는 10 ÷ 2 = 5.0이 됩니다.
C 프로그램 코드
#include<stdio.h>
#include<string.h>
double calculatewordlength(const char *stmt);
int main(){
char stmt[100];
int i=0;
double avglen;
printf("enter any statement:");
while((stmt[i]=getchar()) != '\n')
i++;
stmt[i]='\n';
avglen=calculatewordlength(stmt);
printf("average length of word is:%f.\n ", avglen);
}
double calculatewordlength(const char *stmt){
int charcount=0;
int wordcount=1;
while(*stmt != '\n'){
if(*stmt != ' ')
charcount++;
else if(*stmt == ' ')
wordcount++;
stmt++;
}
return (double)charcount/wordcount;
}코드 동작 방식
main 함수:
- 크기 100의 문자 배열
stmt를 선언하고,getchar()를 이용해 사용자가 Enter 키(개행 문자)를 누를 때까지 한 글자씩 입력을 받습니다. - 입력이 끝나면 마지막 위치에 개행 문자를 저장하여 문장의 끝을 표시합니다.
calculatewordlength()함수를 호출해 평균 길이를 받아온 후 화면에 출력합니다.
calculatewordlength 함수:
charcount(문자 개수)는 0으로,wordcount(단어 개수)는 1로 초기화합니다. 첫 번째 단어도 세어야 하기 때문에 단어 개수는 1부터 시작합니다.- 포인터를 이용해 문장을 한 글자씩 순회하면서, 공백이 아니면
charcount를 증가시키고, 공백이면wordcount를 증가시킵니다. - 순회가 끝나면
(double)charcount/wordcount로 형 변환하여 소수점까지 정확한 평균값을 반환합니다.
실행 결과
enter any statement:Tutorials Point is the best resource for online education average length of word: 5.444444444.
위 예시에서 총 문자 수는 49개, 단어 수는 9개이므로 평균 단어 길이는 약 5.44로 계산됩니다.
마무리
이 프로그램은 while 루프와 포인터만으로 문자열을 순회하며 통계 값을 계산하는 기본적인 패턴을 보여줍니다. 다만 연속된 공백이나 탭 문자가 입력될 경우 단어 개수가 부정확해질 수 있으므로, 실무에서는 이를 처리하는 추가 로직을 고려하는 것이 좋습니다.