Анаграмма - как обратить порядок букв в словах в строке, пропуская остальные символы?
Написать консольное приложение, которое переворачивает все слова во введённой строке.
Например: "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();
}