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

C++에서 [l, r] 범위의 ASCII 값을 가진 알파벳 개수 세기 및 출력하기


임의의 길이를 가진 문자열이 하나 주어지며, 이 문자열 안에서 ASCII 값이 지정된 범위 [l, r]에 속하는 알파벳의 개수를 계산하고 해당 문자들을 출력하는 것이 이번 문제의 목표입니다.

대문자 A~Z의 ASCII 값

ABCDEFGHIJKLMNOPQRS
65666768697071727374757677787980818283
TUVWXYZ
84858687888990

소문자 a~z의 ASCII 값

abcdefghijklmnopqrs
979899100101102103104105106107108109110111112113114115
tuvwxyz
116117118119120121122

예시

입력 - str = "point", First = 111, Last = 117
출력 - 주어진 범위에 속하는 문자: p, o, t
       개수: 3

설명 - p(112), o(111), t(116)는 모두 [111, 117] 범위 안에 있으므로 이 세 문자가 카운트됩니다.

입력 - str = "ABCZXY", First = 65, Last = 70
출력 - 주어진 범위에 속하는 문자: A, B, C
       개수: 3

설명 - A(65), B(66), C(67)는 [65, 70] 범위 안에 있지만 Z(90), X(88), Y(89)는 범위를 벗어나므로 A, B, C만 카운트됩니다.

알고리즘(접근 방법)

  • 문자열과 범위의 시작 값(left), 끝 값(right)을 입력받아 변수에 저장합니다.
  • length() 함수를 사용하여 공백을 포함한 문자열의 전체 길이를 정수 값으로 구합니다.
  • 조건을 만족하는 문자의 개수를 저장할 임시 변수(count)를 선언하고 0으로 초기화합니다.
  • i를 0부터 문자열 길이보다 작은 동안 반복하는 루프를 시작합니다.
  • 루프 안에서 left <= str[i] 이고 동시에 str[i] <= right 인지 검사합니다.
  • 조건이 참이면 count를 1 증가시키고 해당 문자 str[i]를 출력합니다.
  • 루프가 종료되면 count를 반환합니다.
  • 반환된 개수를 최종적으로 출력합니다.

예제 코드

#include <iostream>
using namespace std;
// ASCII 값이 [l, r] 범위에 있는
// 문자의 개수를 세는 함수
int count_char(string str, int left, int right){
   // 개수를 0으로 초기화
   int count = 0;
   int len = str.length();
   for (int i = 0; i < len; i++) {
      // 범위에 속하면 개수를 증가시키고 문자 출력
      if (left <= str[i] and str[i] <= right) {
         count++;
         cout << str[i] << " ";
      }
   }
   // 개수 반환
   return count;
}
int main(){
   string str = "tutorialspoint";
   int left = 102, right = 111;
   cout << "주어진 범위에 속하는 문자들";
   cout << "\n개수: " << count_char(str, left, right);
   return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

주어진 범위에 속하는 문자들
개수: o i l o i n 6

문자열 "tutorialspoint"에서 ASCII 값이 102('f') 이상 111('o') 이하인 문자는 o, i, l, o, i, n으로 총 6개입니다. 나머지 문자인 t(116), u(117), r(114), a(97), s(115), p(112) 등은 범위를 벗어나므로 카운트되지 않습니다.

복잡도 분석

이 알고리즘은 문자열을 한 번만 순회하므로 시간 복잡도는 O(n)이며, 개수를 저장하는 변수 외에 추가적인 공간을 사용하지 않으므로 공간 복잡도는 O(1)입니다.