Реверсирование строки в C#

Реверсирование строки

К сожалению, класс String в C# не содержит метода Reverse(), поэтому вот три способа как можно реверсировать строку:

1. Ручное реверсирование

Самый очевидный способ это реверсировать строку с помощью ручного прохода по ее символам и формирования новой строки:

string input = "hello world";
string output = "";
for (int i = input.Length - 1; i >= 0; i--)
{
    output += input[i];
}

Учтите, что если вы воспользуетесь этим подходом в серьезной программе, вы должны использовать StringBuilder вместо String, так как в вышеприведенном коде новая временная строка создается каждый раз когда вы добавляете отдельный символ в выходную строку.

2. Array.Reverse()

Вторым способ с помощью которого мы можем реверсировать строку является  статический метод Array.Reverse():

string input = "hello world";
char[] inputarray = input.ToCharArray();
Array.Reverse(inputarray);
string output = new string(inputarray);

Сначала мы конвертируем строку в массив символов, затем реверсируем массив, и наконец формируем новую строку из масиива.

3. LINQ

LINQ позволяет нам сократить реверсирование строки в одну линию:

string input = "hello world";
string output = new string(input.ToCharArray().Reverse().ToArray());

Сначала строка снова конвертируется в массив символов. Массив (Array) реализует интерфейс IEnumerable, так что мы можем вызвать LINQ метод Reverse() на нем. С помощью вызова метода ToArray() результирующий IEnumerable снова конвертируется в массив символов, которы используется в конструкторе строки.

Для максимального удобства мы можем создать метод расширения (extension method) для класса String чтобы выполнять реверсирование:

static class StringExtensions
{
    public static string Reverse(this string input)
    {
        return new string(input.ToCharArray().Reverse().ToArray());
    }
}

С помощью этого класса в нашем коде мы теперь можем с легкостью реверсировать любую строку:

Console.WriteLine("hello world".Reverse());

Однако учтите, что все методы для реверсирования строки приведенные выше работают только с 16 битными символами Unicode, которые помещаются в одну символьную переменную. Если вам необходимо реверсировать строки которые содержат расширенные символы Unicode, например chinese kanji, смотрите здесь.

Источник: http://tipsandtricks.runicsoft.com/CSharp/StringReverse.html

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>