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

C++로 문자열 속 대문자, 소문자, 숫자, 특수 문자 개수 계산하기

개요

대문자, 소문자, 특수 문자, 숫자가 모두 섞여 있는 문자열이 주어졌을 때, 각 유형별 문자가 몇 번 등장하는지 빈도를 계산하는 것이 이번 문제의 목표입니다. C++에서는 각 문자의 아스키(ASCII) 값을 기준으로 범위를 비교하는 간단한 방법으로 이를 해결할 수 있습니다.

문자 분류 기준

  • 대문자(Uppercase) — A~Z, 아스키 값 65~90 (65와 90 포함)
  • 소문자(Lowercase) — a~z, 아스키 값 97~122 (97과 122 포함)
  • 숫자(Numeric) — 0~9, 아스키 값 48~57 (48과 57 포함)
  • 특수 문자(Special Characters) — !, @, #, $, %, ^, &, * 등 위 항목에 해당하지 않는 나머지 문자

입력 · 출력 예시

입력 — str = Tutori@lPo!n&90

출력

문자열 내 대문자 개수: 2
문자열 내 소문자 개수: 8
문자열 내 숫자 개수: 2
문자열 내 특수 문자 개수: 3

입력 — str = WELc0m$

출력

문자열 내 대문자 개수: 3
문자열 내 소문자 개수: 2
문자열 내 숫자 개수: 1
문자열 내 특수 문자 개수: 1

알고리즘 접근 방식

  1. 대문자, 소문자, 특수 문자, 숫자가 포함된 문자열을 입력받습니다.
  2. 문자열의 길이(length)를 구합니다.
  3. 대문자, 소문자, 특수 문자, 숫자의 개수를 저장할 변수를 각각 선언하고 0으로 초기화합니다.
  4. 인덱스 0부터 문자열 길이까지 반복하는 FOR 루프를 시작합니다.
  5. 루프 내부에서 str[i]가 'A' 이상 'Z' 이하라면 대문자 카운트를 증가시킵니다.
  6. str[i]가 'a' 이상 'z' 이하라면 소문자 카운트를 증가시킵니다.
  7. str[i]가 '0' 이상 '9' 이하라면 숫자 카운트를 증가시킵니다.
  8. 그 외의 경우에는 특수 문자 카운트를 증가시킵니다.
  9. 루프가 끝나면 각 카운트 값을 출력합니다.

C++ 구현 예제

#include<iostream>
using namespace std;
//대문자, 소문자, 특수 문자, 숫자 개수를 세는 함수
void count(string str){
    int Uppercase = 0;
    int Lowercase = 0;
    int digit = 0;
    int special_character = 0;
    for (int i = 0; i < str.length(); i++){
        if (str[i] >= 'A' && str[i] <= 'Z'){
            Uppercase++;
        }
        else if(str[i] >= 'a' && str[i] <= 'z'){
            Lowercase++;
        }
        else if(str[i]>= '0' && str[i]<= '9'){
            digit++;
        }
        else{
            special_character++;
        }
    }
    cout<<"Total Upper case letters in a string are: "<<Uppercase<< endl;
    cout<<"Total lower case letters in a string are: "<<Lowercase<< endl;
    cout<<"Total number in a string are: "<<digit<< endl;
    cout<<"total of special characters in a string are: "<<special_character<< endl;
}
int main(){
    string str = "Tutori@lPo!n&90";
    count(str);
    return 0;
}

실행 결과

위 코드를 컴파일하여 실행하면 다음과 같은 출력을 확인할 수 있습니다.

Total Upper case letters in a string are: 2
Total lower case letters in a string are: 8
Total number in a string are: 2
total of special characters in a string are: 3

추가 팁: 표준 라이브러리 활용하기

직접 아스키 값 범위를 비교하는 대신, <cctype> 헤더가 제공하는 isupper(), islower(), isdigit() 함수를 사용하면 코드를 더욱 간결하게 작성할 수 있습니다. 또한 이 알고리즘은 문자열을 한 번만 순회하므로 시간 복잡도는 O(n), 공간 복잡도는 O(1)로 매우 효율적입니다.