C#에서 문자열에 포함된 각 문자가 몇 번 나타나는지 확인하고 싶다면, 아래 예제 코드를 실행해 보세요. 이 코드는 문자열을 한 글자씩 순회하며 각 문자의 출현 횟수를 배열에 기록한 뒤, 두 번 이상 반복되는 문자만 화면에 출력합니다.
예제 코드
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 = "Football!";
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");
}
}
}
실행 결과
Character l Occurrence = 2 times Character o Occurrence = 2 times
예제에서는 문자열 "Football!"을 대상으로 사용했으며, 그 결과 문자 'l'과 'o'가 각각 2번씩 나타난 것을 확인할 수 있습니다.
코드 설명
먼저 최대 문자 수를 나타내는 상수 maxCHARS를 256으로 설정하고, 문자열과 함께 정수 배열을 준비합니다. 크기가 256인 배열은 ASCII 코드 범위의 모든 문자에 대한 출현 횟수를 저장하는 역할을 하며, 이를 통해 중복된 값을 손쉽게 집계할 수 있습니다.
calculate 메서드는 문자열의 처음부터 끝까지 순회하면서 각 문자의 등장 횟수를 배열에 누적합니다.
static void calculate(String s, int[] cal) {
for (int i = 0; i < s.Length; i++)
cal[s[i]]++;
}
이후 Main 메서드에서는 배열 전체를 검사하여 출현 횟수가 1보다 큰, 즉 중복해서 나타난 문자만 골라 콘솔에 출력합니다.
for (int i = 0; i < maxCHARS; i++)
if(cal[i] > 1) {
Console.WriteLine("Character " + (char)i);
Console.WriteLine("Occurrence = " + cal[i] + " times");
}
참고: 단어 단위 빈도 계산하기
글자가 아니라 공백으로 구분된 단어별 빈도를 세고 싶다면 Split과 LINQ의 GroupBy를 활용하면 더욱 간결하게 처리할 수 있습니다.
using System;
using System.Linq;
class Demo {
public static void Main() {
string s = "apple banana apple orange banana apple";
var result = s.Split(' ')
.GroupBy(w => w)
.Select(g => new { Word = g.Key, Count = g.Count() });
foreach (var item in result) {
Console.WriteLine($"{item.Word}: {item.Count}");
}
}
}
이 방식은 문자 종류에 제한 없이 임의의 길이를 가진 단어도 집계할 수 있어, 실무에서 텍스트 분석을 할 때 더 널리 사용됩니다.