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

C 언어 isupper() 함수로 문자열의 대문자 개수 세는 방법

문제 상황

C 프로그래밍을 이용해 문자열에 포함된 대문자 알파벳의 총 개수를 어떻게 확인할 수 있을까요?

해결 방법

문장 속 대문자 개수를 세는 데 사용한 핵심 로직은 다음과 같습니다.

for(a=string[0];a!='\0';i++){
    a=string[i];
    if (isupper(a)){
        counter=counter+1;
    }
}

이 로직은 문자열의 첫 문자부터 널 문자('\0')가 나올 때까지 한 글자씩 검사하면서, 현재 문자가 대문자인지 isupper() 함수로 판별하고, 대문자일 경우 카운터 값을 1씩 증가시키는 방식입니다.

예제 1: isupper() 함수 활용

isupper() 함수는 ctype.h 헤더 파일에 정의되어 있으며, 전달된 문자가 대문자(A~Z)이면 참을 반환합니다.

#include<stdio.h>
#include<ctype.h>
void main(){
    // 개수 계산용 변수와 문자열 선언
    int i=0;
    char a;
    char string[50];
    int counter=0;
    // 사용자 입력 받기
    printf("Enter the string :");
    gets(string);
    // for 반복문과 isupper() 함수로 대문자 개수 세기
    for(a=string[0];a!='\0';i++){
        a=string[i];
        if (isupper(a)){
            counter=counter+1;
        }
    }
    // 대문자 개수 출력
    printf("Capital letters in string : %d\n",counter);
}

실행 결과

Enter the string :TutoRialsPoint CPrograMMing
Capital letters in string : 7

입력된 문자열 "TutoRialsPoint CPrograMMing"에는 T, R, P, C, P, M, M 등 총 7개의 대문자가 포함되어 있으며, 프로그램이 정확히 그 개수를 출력하는 것을 확인할 수 있습니다.

예제 2: isupper() 없이 대문자 개수 세기

다음 프로그램은 isupper() 함수를 사용하지 않고, 문자의 아스키 코드 값이 'A'(65) 이상이고 'Z'(90) 이하인지 직접 비교하여 대문자를 판별합니다.

#include<stdio.h>
int main(){
    int upper = 0;
    char string[50];
    int i;
    printf("enter The String : \n");
    gets(string);
    i = 0;
    while(string[i]!= ' '){
        if (string[i] >= 'A' && string[i] <= 'Z')
            upper++;
        i++;
    }
    printf("\nUppercase Letters : %d", upper);
    return (0);
}

실행 결과

enter The String :
TutOrial
Uppercase Letters : 2

입력된 문자열 "TutOrial"에는 T와 O 두 개의 대문자가 있으므로 결과값 2가 출력됩니다. 단, 이 예제는 반복 조건이 공백 문자(' ')를 만나면 종료되도록 작성되었기 때문에, 공백 뒤의 문자들은 검사하지 않는다는 점에 유의해야 합니다.

참고 사항

  • gets() 함수는 입력 크기를 제한할 수 없어 버퍼 오버플로 위험이 있어 C11 표준에서 제거되었습니다. 실제 프로젝트에서는 fgets() 사용을 권장합니다.
  • isupper()를 사용하려면 반드시 ctype.h 헤더 파일을 포함해야 합니다.
  • 아스키 코드 비교 방식은 별도의 헤더 없이 동작하지만, 영문 알파벳 외의 확장 문자 환경에서는 isupper()처럼 로캘을 고려하지 못한다는 차이가 있습니다.