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 }