字串翻轉-經典演算法
阿新 • • 發佈:2019-01-06
經典的三次翻轉:
1.先翻轉字串前n個字元;
2.再翻轉後面的字元;
3.翻轉整個字串;
比如:輸入字串s="12345abc",n=5;
首先翻轉前5個字元變成54321abc,然後翻轉後面的字元變成54321cba,最後翻轉整個字串變成abc12345。
#include <stdio.h> #include <windows.h> #include <string.h> #include <assert.h> /*經典演算法*/ void reverse(char *left, char *right)//翻轉整個字串 { assert(left != NULL && right != NULL); while (left < right) { *left ^= *right; *right ^= *left; *left ^= *right; left++, right--; } } char *_move_steps(char *msg, int steps) { assert(msg != NULL); int len = strlen(msg); steps = steps % len; reverse(msg, msg + steps - 1); reverse(msg + steps, msg + len - 1); reverse(msg, msg + len - 1); return msg; } int main() { char p[] = "12345abc"; _move_steps(p, 5); printf("%s\n", p); system("pause"); return 0; }