如何在C中向左或向右旋转给定的字符串?

rhk*_*vik 3 c

C函数将字符串向右或向左旋转给定数字.当角色根据方向旋转超过字符串的结尾或开头时,它应该环绕

bar*_*ley 10

给定一个str具有长度length和旋转量的字符串n

向左旋转相当于

reverse(str, 0, n);
reverse(str, n, length);
reverse(str, 0, length);
Run Code Online (Sandbox Code Playgroud)

向右旋转相当于

reverse(str, 0, length - n);
reverse(str, length - n, length);
reverse(str, 0, length);
Run Code Online (Sandbox Code Playgroud)

现在你只需要一个反向功能.

更新:我想到了如何使用mod来让你总是按照正确的方向旋转n.

例如

int mod = n % length;
if (mod != 0) { //if 0, don't rotate
    reverse(str, 0, mod);
    reverse(str, mod, length);
    reverse(str, 0, length);
}
Run Code Online (Sandbox Code Playgroud)

经历各种情况

如果n == 5且长度= 10,则mod = 5

如果n == 16且长度= 10,则mod = 6 - 向左旋转16 =向左旋转6

如果n == 0且长度=任何东西,mod = 0

如果n == -1且长度= 10,则mod = 9 - 向右旋转1与向左旋转9相同

如果n == - 15且长度= 9,mod = 3 - 向右旋转15与向左旋转3相同

  • +1:让我想起了Jon Bentley的"Programming Pearls"(或"更多编程珍珠")中的翻转解释. (2认同)