问题描述:

  将一个句子中的单词逆转问题,例如:“I am Chinese!” 逆转后为:“Chinese! am I”

解决方法一:

  先将整个句子逆转,然后逆转以单词为一个单位,一次逆转每一个单词。

 1 /*
 2 逆转单个单词
 3 参数1为要逆转的单词,参数2为逆转的起始位置,参数3为逆转的结束位置
 4 如abcdefg,起始位置为1,结束位置为4,那么逆转后的结果为aedcbfg
 5 */
 6 void ReverseWord(char *word, int starti, int endi)
 7 {
 8     if (NULL == word)
 9         return;
10     char *begin, *end;
11     begin = word + starti;
12     end = word + endi;
13     char *tmp = new char();
14     while (begin <  end && *begin != '\0')
15     {
16         *tmp = *begin;
17         *begin = *end;
18         *end = *tmp;
19         begin++;
20         end--;
21     }
22 }
23 /*
24     逆转一个句子
25 */
26 void ReverseWords(char *sentence)
27 {
28     if (NULL == sentence)
29         return;
30     char *begin = sentence, *end = sentence;
31     while (*end != '\0')
32         end++;
33     end--;//最后一个字符是'\0'
34     ReverseWord(sentence, 0, end - begin);//先将句子逆转一遍
35     //接下来逆转每一个单词
36     char *starti = begin;
37     char *endi = begin;
38 
39     while (starti <= end && *starti != '\0')
40     {
41         while (*endi != ' ' && *endi != '\0')
42             endi++;
43         endi--;
44         ReverseWord(sentence, starti - begin, endi - begin);
45         endi += 2;
46         starti = endi;
47     }
48 }

 

posted on 2016-04-05 11:42  贪吃喵与懒惰汪  阅读(361)  评论(0编辑  收藏  举报