Переворачивание слов из строки

"Я хочу, чтобы меня услышали в России. Абсолютно все. Тысячи жертв, сотни пленных, которые просто не могут понять ради чего их отправили в Украину.
Отправили в Украину умирать. Убивать других. Чем скорее вы скажете своей власти, что войну нужно немедленно остановить – тем больше ваших людей останутся живыми.
Мы видим, что действительно есть выступления ваших граждан против войны. И мы знаем, что многие в России сейчас просто шокированы подлостью и жестокостью власти. И это очень правильная реакция. Я благодарю вас за эту реакцию! Спасибо Леониду Парфёнову, Дмитрию Муратову, Юрию Дудю, Лие Ахеджаковой, Валерию Меладзе – ну, и тысячам. Тысячам достойных других россиян, чья совесть звучит – звучит громко.
Просто остановите тех, кто лжет вам. Лжет нам. Лжет всему миру.
Нужно закончить эту войну. Мы можем жить в мире. В мире глобальном. В мире человечества".

Дана строка состоящая из слов разделенных одним или несколькими разделителями(пробел, точка, запятая). Необходимо перевернуть каждое слово в строке не нарушая при этом порядок слов.

Входные данные

Строка символов.

Выходные данные

Строка с перевернутыми словами.

Россияне ваши войска ведут ужасную войну против Украины, убивают мирное население, не щадя женщин и детей! Мы отстаиваем свою родину, потери войск РФ за несколько дней войны превысили потери в Чеченской войне!
Заберите с Украины своих отцов, мужей, сыновей пока они живы!

Не молчите! Остановите войну! НЕТ ВОЙНЕ!
Пока ты молчишь, гибнут мирные украинцы!
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();
    }
}

Смотрите также: