使用了《编程珠玑》上的解法。
#include <iostream> #include <string> using namespace std; //注意这里使用了XOR进行交换的方法,这种方法不能让一个数和自身交换 void Reverse(string &str, int left, int right){ for(; left < right; left++, right--){ str[left] = str[left] ^ str[right]; str[right] = str[left] ^ str[right]; str[left] = str[left] ^ str[right]; } } void ShiftStr(string &str, int offset){ int len = str.length(); offset = offset>=0 ? offset%len : offset%len + len; Reverse(str, 0, offset-1); Reverse(str, offset, len-1); Reverse(str, 0, len-1); } int main() { string str; for (int i = -5; i <= 5; i++){ str = "abcdefghijklmn"; ShiftStr(str, i); cout<<"Move left "<<i<<" steps : "<<str<<endl; } return 0; }
EOF