Kelimeyi Hecelere Ayıran Sınıf (class)
Nov 07,2008 00:00 by RubeNiS
Önceki gönderdiğim, fonksiyon tabanlı bir yapıydı ve fonksiyon isimleri tembelliğimden kaynaklı, hiçbirşey anlatmayan isimlerdi. Şimdi fonksiyon isimlerini anlaşılır yaptım ve bu fonksiyonları static bir sınıf altında topladım. Entegrasyonu ve kullanımı kolaylaştırdım. Önceki örnekten çok daha iyi oldu. Kullanımı ise oldukça basit. Hece.Hecele(\\\"Hecelenecek Metin\\\") -> He-ce-le-ne-cek Me-tin döndürür.


    public static class Hece
    {
        static char[] Sesliler = { 'a', 'e', 'ı', 'i', 'o', 'ö', 'u', 'ü' };
        static string HecelenmisKelime = "";
        
        static bool Seslimi(char c)
        {
            foreach (char cx in Sesliler)
            {
                if (c == cx)
                    return true;
            }

            return false;
        }

        static int SesliyiBul(string w)
        {
            for (int i = 0; i < w.Length; i++)
                if (Seslimi(w[i]))
                    return i;
            return -1;
        }

        static string TireKoy()
        {
            return (HecelenmisKelime == "") ? "" : "-";
        }

        static void KelimeyiHecele(string w)
        {
            int i = SesliyiBul(w);
            if (i == -1)
                HecelenmisKelime += w;
            else
            {
                if (i == 0)
                {
                    //abba abac abb aba
                    if (w.Length > 1 && Seslimi(w[1]))
                    {
                        HecelenmisKelime += TireKoy() + w.Substring(0, 1);
                        KelimeyiHecele(w.Substring(1));
                    }
                    else
                    {


                        if (w.Length > 3)
                        {
                            if (Seslimi(w[2]))
                            {
                                HecelenmisKelime += TireKoy() + w.Substring(0, 1);
                                KelimeyiHecele(w.Substring(1));
                            }
                            else
                            {
                                HecelenmisKelime += TireKoy() + w.Substring(0, 2);
                                KelimeyiHecele(w.Substring(2));
                            }
                        }
                        else if (Seslimi(w[2]))
                        {
                            HecelenmisKelime += TireKoy() + w.Substring(0, 1);
                            KelimeyiHecele(w.Substring(1));
                        }
                        else
                            HecelenmisKelime += TireKoy() + w;
                    }
                }
                else if (i == 1)
                {
                    if (w.Length > 3)
                    {
                        if (Seslimi(w[2]))
                        {
                            HecelenmisKelime += TireKoy() + w.Substring(0, 2);
                            KelimeyiHecele(w.Substring(2));
                        }
                        else// if(w.Length>4)
                        {
                            if (Seslimi(w[3]))
                            {
                                HecelenmisKelime += TireKoy() + w.Substring(0, 2);
                                KelimeyiHecele(w.Substring(2));
                            }
                            else if (w.Length > 4 && !Seslimi(w[4]))
                            {
                                HecelenmisKelime += TireKoy() + w.Substring(0, 4);
                                KelimeyiHecele(w.Substring(4));
                            }
                            else
                            {
                                HecelenmisKelime += TireKoy() + w.Substring(0, 3);
                                KelimeyiHecele(w.Substring(3));
                            }
                        }

                    }
                    else
                        HecelenmisKelime += TireKoy() + w;
                }
                else
                {
                    if (w.Length > 4)
                    {
                        if (Seslimi(w[4]))
                        {
                            HecelenmisKelime += TireKoy() + w.Substring(0, 3);
                            KelimeyiHecele(w.Substring(3));
                        }
                        else
                        {
                            HecelenmisKelime += TireKoy() + w.Substring(0, 4);
                            KelimeyiHecele(w.Substring(4));
                        }
                    }
                    else
                        HecelenmisKelime += TireKoy() + w;
                }
            }
        }

        public static string Hecele(string rS)
        {
            string HecelenmisMetin = "";
            foreach (string s in rS.Split(' '))
            {
                HecelenmisKelime = "";
                KelimeyiHecele(s);
                HecelenmisMetin += HecelenmisKelime + " ";
            }
            return HecelenmisMetin;
        }
    }