首页 > 代码库 > 剑指Offer42 左旋字符串

剑指Offer42 左旋字符串

 1 /************************************************************************* 2     > File Name: 42_LeftRotateString.c 3     > Author: Juntaran 4     > Mail: JuntaranMail@gmail.com 5     > Created Time: 2016年09月04日 星期日 16时31分43秒 6  ************************************************************************/ 7  8 #include <stdio.h> 9 #include <string.h>10 11 // 反转单词12 void ReverseWord(char* left, char* right)13 {14     if (left== NULL || right==NULL)15         return;16     while (left < right)17     {18         char temp = *left;19         *left = *right;20         *right = temp;21         22         left ++;23         right --;24     }25 }26 27 void LeftRotateString(char* str, int n)28 {29     if (str == NULL || n<=0)30         return str;31     32     int length = strlen(str);33     // n可能超过字符串长度34     n = n % length;35     36     // 第一部分37     char* FirstStart = str;38     char* FirstEnd   = str + n - 1;39     40     // 第二部分41     char* SecondStart = str + n;42     char* SecondEnd   = str + length - 1;43     44     // 先反转第一部分45     ReverseWord(FirstStart, FirstEnd);46     // 再反转第二部分47     ReverseWord(SecondStart, SecondEnd);48     // 整体反转49     ReverseWord(FirstStart, SecondEnd);50 }51 52 int main()53 {54     char str[] = "abcdefg";55     int n = 9;56     57     LeftRotateString(str, n);58     printf("%s\n", str);59 }

 

剑指Offer42 左旋字符串