WT86
WT86

Reputation: 833

Right Circular Shift C#

How can I do Right circular shift in C#?

I use this function to do Left Circular Shift.

My function works as the following:

1100 -> shift by 1 => 1001 1100 -> shift by 2 => 0011

I need to have another one to do the Right Circular Shift? 1001 -> shift 1 => 1100 and so on

private string leftRotateShift(string key, int shift)
        {
            string res = "";
            string[] result = new string[key.Length];
            char[] a = key.ToCharArray();
            int index = 0;
            for (int i = shift; index < a.Length; i++)
            {
                result[index++] = a[i % a.Length].ToString();
            }
            res = string.Join("", result);
            return res;
        }

Upvotes: 1

Views: 3773

Answers (1)

AlexD
AlexD

Reputation: 32586

Assuming 0 <= shift, try

private string leftRotateShift(string key, int shift)
{
    shift %= key.Length;
    return key.Substring(shift) + key.Substring(0, shift);
}

private string rightRotateShift(string key, int shift)
{
    shift %= key.Length;
    return key.Substring(key.Length - shift) + key.Substring(0, key.Length - shift);
}

Upvotes: 3

Related Questions