Hi folks,

I am here with another example, how to reverse a string in different ways?

Below are the different ways to do it.

/// Need one extra array for result, need to traverse full array.

public static string ReverseString1 (string str)
{
char[] chars = str.ToCharArray();
char[] result = new char[chars.Length];

for (int i = 0, j = str.Length - 1; i < str.Length; i++, j--)
{
result[i] = chars[j];
}

return new string(result);
}

-----------------------------------------------------------------

/// Uses swap method to reverse; need to traverse only half of the array.

public static string ReverseString2(string str)
{
char[] chars = str.ToCharArray();
for (int i = 0, j = str.Length - 1; i < j; i++, j--)
{
char c = chars[i];
chars[i] = chars[j];
chars[j] = c;
}
return new string(chars);
}

------------------------------------------------------------------

/// Here is the use of in-place swap without any temp variable

public static string ReverseString3 (string str)
{
char[] chars = str.ToCharArray();
for (int i = 0, j = str.Length - 1; i < j; i++, j--)
{
chars[i] = str[j];
chars[j] = str[i];
}
return new string(chars);
}

---------------------------------------------------------------------

/// String Reversal without Copy to Char Array it's i <= j as we need to get the middle character in case of odd number of characters in the string

public static string ReverseString3b(string str)
{
char[] chars = new char[str.Length];
for (int i = 0, j = str.Length - 1; i <= j; i++, j--)
{
chars[i] = str[j];
chars[j] = str[i];
}
return new string(chars);
}

--------------------------------------------------------------------

/// String reversal with stack [Please note here Stack_Array is my custom Stack class, you can replace this with provided by .NET]

public static string ReverseString4(string str)
{
Stack_Array stk1 = new Stack_Array(str.Length);
foreach (char c in str)
stk1.Push(c);
string revString = null;
foreach (char c in str)
revString += stk1.Pop();
return revString;
}

-------------------------------------------------------------------

/// String reversal with XOR (^); interesting way to reversal
/// A [i] = A[i] ^ A[len] -> A[i]  = 80 ^ 73 -> A[i] = 25
/// A [len] = A[len] ^ A[i] -> A[len]  = 73 ^ 25 -> A[len] = 80
/// A [i] = A[i] ^ A[len] -> A[i]  = 25 ^ 80 -> A[i] = 73

public static string ReverseString5(string str)
{
char[] inputstream = str.ToCharArray();
int length = str.Length - 1;
for (int i = 0; i < length; i++, length--)
{
inputstream[i] ^= inputstream[length];
inputstream[length] ^= inputstream[i];
inputstream[i] ^= inputstream[length];
}
return new string(inputstream);
}

-------------------------------------------------------------------

/// Recursion method; simple and regular performance for small strings

public static string ReverseString_Rec(string str)
{
if (str.Length <= 1)
return str;
else
return ReverseString_Rec(str.Substring(1)) + str[0];
}

------------------------------------------------------------------

/// Another way of recursion; need to pass index as 0

public static string ReverseString_Rec2(string str, int index)
{
char[] chars = str.ToCharArray();
int len = chars.Length;
if (index < len / 2)
{
char c = chars[index];
chars[index] = chars[len - index - 1];
chars[len - index - 1] = c;
index++;
return ReverseString_Rec2(new string (chars), index);
}
else
{
return new string(chars);
}
}