C# 문자열에서 문자 발생 횟수 계산하기
이번 글에서는 C#을 활용하여 문자열에 포함된 각 문자가 몇 번 등장하는지 계산하는 방법을 알아보겠습니다. 먼저 예시로 사용할 문자열은 다음과 같습니다.
String s = "mynameistomhanks";
다음으로 크기 256의 정수 배열을 생성하고, 앞서 선언한 문자열과 함께 새로운 메서드에 전달합니다. 이 메서드가 문자열 내 각 문자의 등장 횟수를 계산하게 됩니다.
static void calculate(String s, int[] cal) {
for (int i = 0; i < s.Length; i++)
cal[s[i]]++;
}여기서 핵심 아이디어는 문자열의 각 문자를 배열의 인덱스로 사용하는 것입니다. C#에서 char 타입은 해당 문자의 ASCII 코드 값(정수)으로 자동 변환되기 때문에, cal[s[i]]++와 같이 문자를 인덱스로 삼아 카운트를 1씩 증가시킬 수 있습니다. 크기를 256으로 설정한 이유는 기본 ASCII 문자 집합 전체를 커버하기 위함입니다.
그럼 전체 코드를 살펴보겠습니다.
예제 코드
using System;
class Demo {
static int maxCHARS = 256;
static void calculate(String s, int[] cal) {
for (int i = 0; i < s.Length; i++)
cal[s[i]]++;
}
public static void Main() {
String s = "mynameistomhanks";
int[] cal = new int[maxCHARS];
calculate(s, cal);
for (int i = 0; i < maxCHARS; i++) {
if (cal[i] > 1) {
Console.WriteLine("Character " + (char) i);
Console.WriteLine("Occurrence = " + cal[i] + " times");
}
if (cal[i] == 1) {
Console.WriteLine("Character " + (char) i);
Console.WriteLine("Occurrence = " + cal[i] + " time");
}
}
}
}코드 설명
- maxCHARS = 256: 카운트 배열의 크기로, 모든 ASCII 문자를 인덱싱할 수 있도록 합니다.
- calculate 메서드: 문자열을 한 글자씩 순회하며 각 문자에 해당하는 배열 요소의 값을 증가시킵니다.
- Main 메서드: 결과 출력 시
(char) i형변환을 통해 인덱스를 다시 문자로 되돌려 화면에 표시하며, 등장 횟수가 1인 경우와 2 이상인 경우를 구분해 출력합니다.
실행 결과
Character a Occurrence = 2 times Character e Occurrence = 1 time Character h Occurrence = 1 time Character i Occurrence = 1 time Character k Occurrence = 1 time Character m Occurrence = 3 times Character n Occurrence = 2 times Character o Occurrence = 1 time Character s Occurrence = 2 times Character t Occurrence = 1 time Character y Occurrence = 1 time
실행 결과를 보면 문자 'm'이 3번으로 가장 많이 등장했으며, 'a', 'n', 's'는 각각 2번, 나머지 문자들은 1번씩 나타난 것을 확인할 수 있습니다. 이처럼 배열과 반복문만으로도 문자열 내 문자 빈도를 손쉽게 분석할 수 있습니다.