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

C# 문자열에서 각 문자·단어의 빈도(출현 횟수) 구하는 방법

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}");
      }
   }
}

이 방식은 문자 종류에 제한 없이 임의의 길이를 가진 단어도 집계할 수 있어, 실무에서 텍스트 분석을 할 때 더 널리 사용됩니다.