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

C 언어로 문장에서 공백, 대문자, 소문자 개수 세는 방법

C 프로그래밍에서 문자열을 분석하는 것은 기초적이면서도 자주 활용되는 작업입니다. 이번 글에서는 사용자가 입력한 문장에서 대문자, 소문자, 숫자, 공백, 특수문자의 개수를 각각 세어 출력하는 C 프로그램을 소개합니다.

전체 코드

#include <stdio.h>

int main() {
    char str[100];
    int i;
    int upper = 0, lower = 0, number = 0, special = 0, whitesp = 0;

    printf("enter string");
    gets(str);

    for (i = 0; str[i] != '\0'; i++) {
        if (str[i] >= 'A' && str[i] <= 'Z')
            upper++;
        else if (str[i] >= 'a' && str[i] <= 'z')
            lower++;
        else if (str[i] >= '0' && str[i] <= '9')
            number++;
        else if (str[i] == ' ')
            whitesp++;
        else
            special++;
    }

    printf("Upper case letters: %d\n", upper);
    printf("Lower case letters: %d\n", lower);
    printf("Numbers: %d\n", number);
    printf("Whitespace: %d\n", whitesp);
    printf("Special characters: %d\n", special);

    return 0;
}

코드 동작 원리

1. 변수 선언

char str[100]은 최대 99글자를 저장할 수 있는 문자 배열이며, upper(대문자), lower(소문자), number(숫자), whitesp(공백), special(특수문자) 변수는 각 항목의 개수를 저장하기 위해 모두 0으로 초기화됩니다.

2. 반복문과 조건 분기

for 루프는 문자열의 끝을 알리는 널 문자('\0')를 만날 때까지 한 글자씩 검사하며, 아스키(ASCII) 코드 값 범위를 기준으로 문자를 분류합니다.

  • 대문자: 'A'~'Z' 범위에 해당하면 upper++
  • 소문자: 'a'~'z' 범위에 해당하면 lower++
  • 숫자: '0'~'9' 범위에 해당하면 number++
  • 공백: 공백 문자(' ')와 일치하면 whitesp++
  • 특수문자: 위 어느 조건에도 해당하지 않으면 special++

3. 결과 출력

모든 문자 검사가 끝나면 printf() 함수와 정수 서식 지정자 %d를 사용해 각 항목별 개수를 차례로 화면에 출력합니다.

실행 결과 예시

"Hello World! 123"이라는 문장을 입력했다면 결과는 다음과 같습니다.

Upper case letters: 2
Lower case letters: 8
Numbers: 3
Whitespace: 2
Special characters: 1

주의 사항 및 개선 팁

  • gets() 함수 주의: 입력 길이를 제한할 수 없어 버퍼 오버플로우 위험이 있으며 C11 표준에서 삭제되었습니다. 실무에서는 fgets(str, sizeof(str), stdin)을 사용하는 것이 안전합니다.
  • 루프 변수 자료형: 인덱스 변수 ichar보다 int로 선언하는 것이 바람직합니다.
  • 조건 단순화: 루프 조건은 str[i] != '\0'만으로 충분하며, 불필요한 비교 연산은 제거하는 것이 좋습니다.
  • ctype.h 헤더 활용: isupper(), islower(), isdigit(), isspace() 등의 표준 라이브러리 함수를 사용하면 더 간결하고 이식성 좋은 코드를 작성할 수 있습니다.

마무리

이 예제는 문자열 순회, 아스키 코드 비교, 조건문 활용이라는 C 언어의 핵심 개념을 모두 담고 있습니다. 코드를 직접 작성하고 다양한 문장을 입력해 보면서 동작 원리를 확실히 익혀 보시기 바랍니다.