Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C언어 while 루프로 문장의 평균 단어 길이 계산하기

문제 정의

프로그램 실행 중에 사용자로부터 문장을 입력받고, 해당 문장에 포함된 단어들의 평균 길이를 계산하는 프로그램을 작성해야 합니다.

예를 들어 "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 루프와 포인터만으로 문자열을 순회하며 통계 값을 계산하는 기본적인 패턴을 보여줍니다. 다만 연속된 공백이나 탭 문자가 입력될 경우 단어 개수가 부정확해질 수 있으므로, 실무에서는 이를 처리하는 추가 로직을 고려하는 것이 좋습니다.