Анаграмма - как обратить порядок букв в словах в строке, пропуская остальные символы?

Написать консольное приложение, которое переворачивает все слова во введённой строке.

Например: "abcd efgh" => "dcba hgfe"

Все небуквенные символы должны остаться на своих местах.

Например: "a1bcd efg!h" => "d1cba hgf!e"

class Program
{
    static void Main()
    {
        string str;

        Console.WriteLine("Введите строку: ");
        str = Console.ReadLine();

        if (str != "")
        {
            for (int i = str.Length; i > 0; i--)
            {
                Console.Write(str[i - 1]);
            }
        }
        Console.ReadKey();
    }
}

Этот код переворачивает всю строку. Дальше не имею понятия как сделать, чтобы небуквенные символы оставались на своих местах.

Как-то так, кто поможет решить это?


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

Автор решения: Pavlo Khyzhniak

Попробуйте разбить на слова, используйте Split(' ') с исходной строкой и работайте с каждым словом, переворачивая слово игнорируя спец знаки и потом вставьте спец. знаки в их исходные позиции.

→ Ссылка
Автор решения: max

Логика разворота слова на месте оставляя спец символы на прежних местах.

public string ReverseWord(string word){
    StringBuilder sb = new StringBuilder();
    char[] chars = word.ToCharArray();
    int i = word.Length - 1;
    foreach (char c in chars){
        if (!char.IsLetter(c)){
            sb.Append(c);
            i++;
        }
        else{
            while (i > 0 && !char.IsLetter(chars[i])){
                i--; // skip non-alphabetic characters
            }
            sb.Append(chars[i]);
        }
        i--;
    }
    return sb.ToString();
}
→ Ссылка