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

C 언어로 문자열에서 가장 많이 나타나는 문자 찾기

C 언어에서 문자열(string)이란 문자들이 모인 배열을 의미합니다.

문자열 선언

문자열 배열은 다음과 같은 형식으로 선언합니다.

char stringname [size];

예를 들어 char string[50];은 길이 50자를 저장할 수 있는 문자열을 선언하는 코드입니다.

문자열 초기화

문자열을 초기화하는 방법에는 두 가지가 있습니다.

  • 단일 문자 상수 사용 − 각 문자를 개별적으로 대입합니다.
char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
  • 문자열 상수 사용 − 큰따옴표로 묶은 문자열을 한 번에 대입합니다.
char string[10] = "Hello";

접근(Accessing) − 서식 지정자 %s를 사용하면 문자열 끝의 널 문자('\0')를 만날 때까지 문자열 전체를 손쉽게 입력하거나 출력할 수 있습니다.

최다 출현 문자 찾기 로직

문자열에서 가장 많이 나타나는 문자를 찾는 핵심 로직은 다음과 같습니다.

  • 1단계: 먼저 각 문자의 빈도수(frequency)를 계산합니다. 문자를 정수형(아스키 코드 값)으로 변환하면 이를 배열의 인덱스로 활용할 수 있습니다.
while(string[i] != '\0'){
    value = (int)string[i];
    frequency[value] += 1;
    i++;
}
  • 2단계: 계산된 빈도 배열을 순회하며 가장 큰 값을 가진 인덱스, 즉 최다 출현 문자를 찾아냅니다.
maximum = 0;
for(i=0; i<CHARS; i++){
    if(frequency[i] > frequency[maximum])
        maximum = i;
}

전체 예제 코드

다음은 문자열에서 가장 많이 나타나는 문자와 그 횟수를 출력하는 완전한 C 프로그램입니다.

#include <stdio.h>
#define SIZE 100 // 문자열 최대 길이
#define CHARS 255 // 처리 가능한 최대 문자 수

int main(){
    char string[SIZE];
    int frequency[CHARS];
    int i = 0, maximum;
    int value;

    printf("Enter the string:\n ");
    gets(string);

    // 모든 문자의 빈도를 0으로 초기화
    for(i=0; i<CHARS; i++){
        frequency[i] = 0;
    }

    /* 각 문자의 빈도수 계산 */
    i=0;
    while(string[i] != '\0'){
        value = (int)string[i];
        frequency[value] += 1;
        i++;
    }

    /* 최대 빈도 문자 탐색 */
    maximum = 0;
    for(i=0; i<CHARS; i++){
        if(frequency[i] > frequency[maximum])
            maximum = i;
    }

    printf("Maximum occurrence character is '%c' = %d times.", maximum,
           frequency[maximum]);
    return 0;
}

실행 결과

위 프로그램을 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.

Enter the string:
tutorials point
Maximum occurrence character is 't' = 3 times.

참고 사항

예제에서 사용된 gets() 함수는 입력 길이를 제한하지 못해 버퍼 오버플로우 위험이 있어 현재는 표준에서 제거되었습니다. 실무에서는 fgets(string, SIZE, stdin)처럼 크기를 지정할 수 있는 안전한 함수를 사용하는 것이 좋습니다. 또한 이 알고리즘은 시간 복잡도 O(n)으로 문자열을 한 번만 순회하므로 매우 효율적이며, 공백 문자 역시 하나의 문자로 계산된다는 점에 유의해야 합니다.