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

 

转载于:https://www.cnblogs.com/Juntaran/p/5839781.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值