Перевертання слів з рядка

Задано рядок з слів розділених одним чи декількома розділювачами(пробіл, крапка, кома). Необхідно перевернути кожне слово з рядка не змінюючи при цьому порядок слів та розділових знаків.

Вхідні дані

Рядок символів.

Вихідні дані

Рядок з перевернутими словами.

using System;

class Program
{
    /// <summary>
    /// метод для отримання індексу розділювача
    /// </summary>
    /// <param name="phrase">рядок</param>
    /// <param name="startIndex">позиція початку пошуку розділювача</param>
    /// <param name="separators">масив допустимих розділювачів</param>
    /// <param name="currentSeparator">поточний розділювач</param>
    /// <returns>індекс розділювача чи -1, якщо розділювач не знайдено</returns>
    static int IndexOf(string phrase, int startIndex, char[] separators, out char currentSeparator)
    {
        currentSeparator = ' ';
        for (var i = startIndex; i < phrase.Length; i++)
        {
            for (var j = 0; j < separators.Length; j++)
            {
                if (phrase[i] == separators[j])
                {
                    currentSeparator = separators[j];
                    return i;
                }
            }
        }

        //якщо розділювач не знайдено
        return -1;
    }

    static string WordsReverse(string phrase)
    {
        var phraseLength = phrase.Length;
        var retValue = new char[phraseLength];
        var wordStartIndex = 0;

        while (wordStartIndex < phraseLength)
        {
            var separatorIndex = IndexOf(phrase, wordStartIndex, new[] { ' ', ',', '.' }, out char currentSeparator);
            if (separatorIndex == -1)
            {
                separatorIndex = phrase.Length;
            }
            else
            {
                retValue[separatorIndex] = currentSeparator;
            }

            var currentIndex = wordStartIndex;
            for (var i = separatorIndex - 1; i >= wordStartIndex; i--)
            {
                retValue[currentIndex] = phrase[i];
                currentIndex++;
            }

            wordStartIndex = separatorIndex + 1;
        }

        return new string(retValue);
    }

    static void Main(string[] args)
    {
        var text = Console.ReadLine();
        Console.WriteLine(WordsReverse(text));
        Console.ReadKey();
    }
}

Дивіться також: