예제 #1
0
        /// <summary>
        /// Удаляет гласные буквы из слова
        /// </summary>
        /// <param name="sInpWord">Входная строка (без пробелов)</param>
        /// <param name="intense">Интнсивность в процентах</param>
        /// <returns></returns>
        private string RemVowels(string sInpWord, int intense)
        {
            string res = "";

            // Если интенсивность меньше 1, то не удаляем гласные
            if (intense < 1)
            {
                return(sInpWord);
            }
            if (sInpWord.Length < 3)
            {
                return(sInpWord);
            }
            // Переводим проценты в "каждый k-й"
            int everyK = 100 / intense;

            // Отбираем все буквы
            int cnt = 0;

            //foreach (char ch in sInpWord)
            for (int i = 0; i < sInpWord.Length; i++)
            {
                char ch = sInpWord[i];
                if (SyllableParser.GetLetterType(ch) == LetterType.Consonant)
                {
                    res += ch;
                }
                if (SyllableParser.GetLetterType(ch) == LetterType.Vowel)
                {
                    cnt++;
                    if (cnt % everyK != 0)
                    {
                        res += ch;
                    }
                    //если буква последння
                    else if (i == sInpWord.Length - 1)
                    {
                        res += ch;
                    }
                }
                if (SyllableParser.GetLetterType(ch) == LetterType.Unknown)
                {
                    res += ch;
                }
            }
            // Сохраняем первую гласную
            if (SyllableParser.GetLetterType(sInpWord[0]) == LetterType.Vowel)
            {
                if (res[0] != sInpWord[0])
                {
                    res = sInpWord[0] + res;
                }
            }
            return(res);
        }
예제 #2
0
        /// <summary>
        /// Сокращает слово
        /// </summary>
        /// <param name="sInpWord">Входная строка</param>
        /// <param name="maxSyll">Максимальное число слогов</param>
        /// <returns></returns>
        private string TrimWord(string sInpWord, int maxSyll, int syllsToHyphen)
        {
            string sOutWord = "";

            if (sInpWord.Length < 3)
            {
                return(sInpWord);
            }

            string[] Syllables = SyllableParser.ParseAlt(sInpWord);
            if (Syllables.Length > syllsToHyphen)
            {
                return(Syllables[0] + Syllables[1][0] + '-' + Syllables.Last());//Test test test
            }
            else
            {
                for (int i = 0; i < Syllables.Length; i++)
                {
                    sOutWord += Syllables[i];
                    if (i >= maxSyll - 1)
                    {
                        // Добавляем 1 согласную букву из следующего слога,
                        if (Syllables.Length - 1 >= i + 1) // если он(слог) есть)))0)
                        {
                            sOutWord += Syllables[i + 1][0];
                        }

                        // Удаляем все гласные в конце слова
                        while (SyllableParser.GetLetterType(sOutWord.Last()) == LetterType.Vowel)
                        {
                            sOutWord = sOutWord.Remove(sOutWord.Length - 1, 1);
                        }

                        // Добавляенм точку, если сократили слово
                        if (sOutWord.Length < sInpWord.Length)
                        {
                            sOutWord += '.';
                        }
                        break;
                    }
                }
            }

            return(sOutWord);
        }