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