剑指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 }

 

posted @ 2016-09-04 17:14  Juntaran  阅读(155)  评论(0编辑  收藏  举报