C#에서 문자열에 어떤 모음(a, e, i, o, u)이 포함되어 있는지 확인하려면 LINQ의 Where, Distinct, Any 메서드를 활용하면 간단하게 처리할 수 있습니다. 가장 먼저 모음을 걸러내기 위한 조건을 설정합니다.
string res = str.Where(chk => "aeiouAEIOU".Contains(chk)).Distinct();
위 코드는 다음 문자열을 대상으로 동작합니다.
string str = "the quick brown fox jumps over the lazy dog";
Where()는 문자열의 각 문자가 "aeiouAEIOU"에 포함되어 있는지 검사해 모음만 남기고, Distinct()는 중복된 모음을 제거해 줍니다.
이어서 Any() 메서드를 사용하면 문자열에 모음이 하나라도 존재하는지 확인할 수 있습니다.
if(!res.Any())
Console.WriteLine("No vowels!");
마지막으로 foreach 루프를 돌면서 문자열에 실제로 포함된 모음들을 하나씩 출력합니다.
예제 코드
using System;
using System.Linq;
public class Program {
public static void Main() {
string str = "the quick brown fox jumps over the lazy dog";
var res = str.Where(chk => "aeiouAEIOU".Contains(chk)).Distinct();
if(!res.Any())
Console.WriteLine("No vowels!");
foreach(var vowel in res)
Console.WriteLine("Your phrase contains vowel = {0}", vowel);
}
}
실행 결과
Your phrase contains vowel = e
Your phrase contains vowel = u
Your phrase contains vowel = i
Your phrase contains vowel = o
Your phrase contains vowel = a
실행 결과를 보면 이 문장에는 a, e, i, o, u 다섯 개의 모음이 모두 포함되어 있으며, Distinct() 덕분에 각 모음은 중복 없이 한 번씩만 출력됩니다.
참고: 모든 모음이 포함되었는지 한 번에 확인하기
포함된 모음 목록을 나열하는 대신, "모든 모음이 빠짐없이 들어 있는지" 여부만 참/거짓으로 판별하고 싶다면 다음과 같이 작성할 수 있습니다.
bool hasAllVowels = "aeiou".All(v => str.ToLower().Contains(v));
Console.WriteLine(hasAllVowels ? "모든 모음이 포함되어 있습니다." : "일부 모음이 없습니다.");
이처럼 LINQ를 활용하면 복잡한 반복문을 직접 작성하지 않고도 문자열 속 모음을 손쉽게 필터링하고 검증할 수 있습니다.