代码改变世界

单词翻转

2015-08-13 15:59  codinglol  阅读(292)  评论(0编辑  收藏  举报

题目描述

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如,输入“I am a student.”,则输出“student. a am I”。

分析与解法

方案一:

首先将整个字符串反转,得到".tneduts a ma I",再将每个单词反转即可得到"studen. a am I",代码如下:

 1 void Reverse(char *begin, char *end){
 2     if(begin == NULL || end == NULL)
 3         return;
 4     while(begin < end){
 5         char tmp = *begin;
 6         *begin = *end;
 7         *end = tmp;
 8         ++begin;
 9         --end;
10     }
11 }
12 
13 void ReverseString(char *str){
14     if(str == NULL)
15         return;
16     char *begin = str;
17     char *end = str;
18     while(*end != '\0'){
19         ++end;
20     }
21     --end;
22     
23     Reverse(begin,end);
24     
25     begin = end = str;
26     while(*begin != '\0'){
27         if(*begin == ' '){
28             ++begin;
29             ++end;
30             continue;
31         }
32         else if(*end == ' ' || *end == '\0'){
33             Reverse(begin,--end);
34             begin = ++end;
35         }
36         else{
37             ++end;
38         }
39     }
40 }

方案二:

先将每个单词反转,再将整个字符串反转也可以得到结果。