Реверс строки с сохранением позиций слов и спец. символов

Нужно сделать реверс с сохранением слов и символов ( , ,, !)

static void Main(string[] args) {

    // Заданная строка
    strint temp = "ffsd!f jgh1!ff"
    // Нужно получить 
    result = "fdsf!f ff1h!gj"

}

Мой результат:

public class Anagram {
    private string someText = default;

    public Anagram() {
        someText = "1234 5!678";

    }

    private string ReverseWord(string someString) {

        int index = 0;

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.Length = someString.Length;
        if (String.IsNullOrEmpty(someString)) {
            throw new ArgumentNullException(nameof(someString));

        }
        else {

            for (int i = someString.Length - 1; i >= 0; i--) {

                if (Char.IsLetterOrDigit(someString[i])) {
                    stringBuilder.Insert(index, someString[i]);
                }
                else {

                    stringBuilder.Insert(i, someString[i]);
                }

                index++;
            }
        }

        string result = stringBuilder.ToString();
        return result;

    }

Ответы (1 шт):

Автор решения: aepot

Вот достаточно простое решение "в лоб".

static void Main(string[] args)
{
    string text = "ffsd!f jgh1!ff";
    string result = ReverseText(text);
    Console.WriteLine(result);
}

static string ReverseText(string text)
{
    string[] words = text.Split(' ');
    for (int i = 0; i < words.Length; i++)
    {
        if (words[i].Length > 1)
        {
            words[i] = ReverseWord(words[i]);
        }
    }
    return string.Join(" ", words);
}

static string ReverseWord(string word)
{
    char[] chars = word.ToCharArray();
            
    int j = word.Length - 1;
    for (int i = 0; i < word.Length; i++)
    {
        if (char.IsLetterOrDigit(word[i]))
        {
            while (!char.IsLetterOrDigit(word[j]))
            {
                j--;
            }
            chars[j] = word[i];
            j--;
        }
    }
    return new string(chars);
}

Не стесняйтесь разбивать свое решение на методы, тогда не придется забивать голову всем сразу.

fdsf!f ff1h!gj
→ Ссылка