Reverse a String
Array.Reverse()
public string ArrayReverseString(string stringToReverse)
{
var charArray = stringToReverse.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
Enumerable Reverse() Extension
public string EnumerableReverseMethod(string stringToReverse)
{
return string.Concat(Enumerable.Reverse(stringToReverse));
}
Recursion
public string RecursiveStringReverseMethod(string stringToReverse)
{
if (stringToReverse.Length <= 1)
return stringToReverse;
return stringToReverse[^1] +
RecursiveStringReverseMethod(stringToReverse[1..^1]) + stringToReverse[0];
}
Loop and XOR Operator
public string ReverseXorMethod(string stringToReverse)
{
var charArray = stringToReverse.ToCharArray();
var len = stringToReverse.Length - 1;
for (int i = 0; i < len; i++, len--)
{
charArray[i] ^= charArray[len];
charArray[len] ^= charArray[i];
charArray[i] ^= charArray[len];
}
return new string(charArray);
}
Stack
public string StackReverseMethod(string stringToReverse)
{
var resultStack = new Stack<char>();
foreach (char c in stringToReverse)
{
resultStack.Push(c);
}
var sb = new StringBuilder();
while (resultStack.Count > 0)
{
sb.Append(resultStack.Pop());
}
return sb.ToString();
}
StringBuilder
public string StringBuilderReverseMethod(string stringToReverse)
{
var sb = new StringBuilder(stringToReverse.Length);
for (int i = stringToReverse.Length - 1; i >= 0; i--)
{
sb.Append(stringToReverse[i]);
}
return sb.ToString();
}
Create()
public string StringCreateMethod(string stringToReverse)
{
return string.Create(stringToReverse.Length, stringToReverse, (chars, state) =>
{
state.AsSpan().CopyTo(chars);
chars.Reverse();
});
}
LINQ Reverse()
public string StringExtensionReverseMethod(string stringToReverse)
{
return new string(stringToReverse.Reverse().ToArray());
}
Special Characters Reversion With TextElementEnumerator
public string TextElementEnumeratorMethod(string stringToReverse)
{
return string.Create(stringToReverse.Length, stringToReverse, (chars, val) =>
{
var valSpan = val.AsSpan();
var en = StringInfo.GetTextElementEnumerator(val);
en.MoveNext();
var start = en.ElementIndex;
var pos = chars.Length;
while (en.MoveNext())
{
var next = en.ElementIndex;
var len = next - start;
valSpan[start..next].CopyTo(chars[(pos - len)..pos]);
pos -= len;
start = next;
}
if (start != 0)
valSpan[start..].CopyTo(chars[0..pos]);
});
}