左旋轉字串與右旋轉字串
阿新 • • 發佈:2019-02-09
一、 關於左旋轉與右旋轉操作:
定義字串的左旋轉操作:把字串前面的幾個字元移動到字串後面去,比如"ABCDEFGHI",左旋轉2位得到"CDEFGHIAB";
同樣右旋轉操作:把字串後面的幾個字元移動到字串前面去,比如“ABCDEFGHI”右旋轉2位得到“HIABCDEFG”;
二、對於左旋轉的實現
void reverse(char *left, char *right) { assert((left != NULL)&&(right != NULL)); while(left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } void LeftLoopMove(char *pStr, unsigned short steps) { int len = strlen(pStr); assert(pStr); reverse(pStr, pStr+steps-1); //逆序前半部分 reverse(pStr+steps, pStr+len-1); //逆序後半部分 reverse(pStr, pStr+len-1); //整體逆序 } int main() { char arr[] = "abcdefghi"; LeftLoopMove(arr,2); printf("%s\n", arr); return 0; }
三、對於右旋轉的實現:
void reverse(char *left, char *right) { assert((left != NULL)&&(right != NULL)); while(left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } void RightLoopMove(char *pStr, unsigned short steps) { int len = strlen(pStr); assert(pStr); reverse(pStr, pStr+len-1); //整體逆序 reverse(pStr, pStr+steps-1); //逆序前半部分 reverse(pStr+steps, pStr+len-1); //逆序後半部分 } int main() { char arr[] = "abcdefghi"; RightLoopMove(arr,2); printf("%s\n", arr); return 0; }
四、圖片解析旋轉原理
五、在《程式設計師程式設計藝術》這本書中有詳細的各種解法,可以參考