Reputation: 833
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
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