如何在C#中进行正确的循环移位?
我使用此功能进行左循环移位。
我的功能如下:
1100 - >移位1 => 1001 1100 - >移位2 => 0011
我需要另外一个做正确的循环转换吗? 1001 - > shift 1 => 1100 等等
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;
}
答案 0 :(得分:2)
假设0 <= shift
,请尝试
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);
}