剑指Offer41 反转单词顺序,单词字符顺序不变

 1 /*************************************************************************
 2     > File Name: 41_ReverseWords.c
 3     > Author: Juntaran
 4     > Mail: JuntaranMail@gmail.com
 5     > Created Time: 2016年09月04日 星期日 16时18分34秒
 6  ************************************************************************/
 7 
 8 #include <stdio.h>
 9 
10 // 反转单词
11 void ReverseWord(char* left, char* right)
12 {
13     if (left== NULL || right==NULL)
14         return;
15     while (left < right)
16     {
17         char temp = *left;
18         *left = *right;
19         *right = temp;
20         
21         left ++;
22         right --;
23     }
24 }
25 
26 void Reverse(char* str)
27 {
28     if (str == NULL)
29         return;
30     
31     char* left = str;
32     char* right = str;
33     while (*(right+1) != '\0')
34         right++;
35     
36     // 先反转整个句子
37     ReverseWord(left, right);
38     
39     // 再逐步反转每个单词
40     left = str;
41     right = str;
42     while (*left != '\0')
43     {
44         if (*left == ' ')
45         {
46             left ++;
47             right++;
48         }
49         else if (*right==' ' || *right=='\0')
50         {
51             ReverseWord(left, --right);
52             left = ++right;
53         }
54         else
55         {
56             right ++;
57         }
58     }
59 }
60 
61 int main()
62 {
63     char str[] = "I am a student. ";
64     Reverse(str);
65     
66     printf("%s\n", str);
67     return 0;
68 }

 

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值