循环左移(ROL,Ring Shift Left)可用于字符串的旋转当中。
abcdef ⇒ defabc
可看做整个字符串循环左移三位;
// 循环左移1位,作为左移 k 位的辅助函数
// n 标识字符串的长度
void ROL1(char* s, int n)
{
char t = s[0];
for (int i = 1; i < n; ++i)
s[i-1] = s[i];
s[n-1] = t;
}
// 循环左移 k 位
void ROLK(char* s, int n, int k)
{
while (k--)
ROL1(s, n);
}