Хорошо, вот решение LINQ:
var reversedWords = string.Join(" ",
str.Split(' ')
.Select(x => new String(x.Reverse().ToArray())));
Если вы используете .NET 3.5, вам также необходимо преобразовать обратную последовательность в массив:
var reversedWords = string.Join(" ",
str.Split(' ')
.Select(x => new String(x.Reverse().ToArray()))
.ToArray());
Другими словами:
- Разделение на пробелы
- Для каждого слова создайте новое слово, обрабатывая ввод как последовательность символов, переворачивайте эту последовательность, превращайте результат вмассив, а затем вызовите
string(char[])
конструктор - В зависимости от версии платформы, вызовите
ToArray()
для последовательности строк, так как .NET 4 имеет больше доступных перегрузок - Вызов
string.Join
длярезультат, чтобы снова соединить перевернутые слова.
Обратите внимание, что этот способ перестановки строки несколько громоздок.Для этого легко создать метод расширения:
// Don't just call it Reverse as otherwise it conflicts with the LINQ version.
public static string ReverseText(this string text)
{
char[] chars = text.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
Обратите внимание, что это все еще"неправильно" по-разному - он не справляется с объединением символов, суррогатных пар и т. Д.Он просто переворачивает последовательность кодовых единиц UTF-16 в исходной строке.Хорошо для игры, но вы должны понимать, почему не стоит использовать его для реальных данных.