字符串面试题:将句子的单词序倒置

将一句话里的单词进行倒置,标点符号不倒置。比如一句话:i come from beijing.倒置后变成:beijing. from come i。

解析:解决该问题可以分为两步:第一步全盘置换该语句成:.gnijieb morf emoc i。第二步进行部分翻转,如果不是空格,则开始翻转单词。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 void reverseSentence(char *str)
 6 {
 7     int i, len, begin, end;
 8     char tmp; // 缓存翻转的字符
 9 
10     len = strlen(str);//读取字符串的长度
11     // 第一步:全盘翻转
12     begin = 0;
13     end = len - 1;
14     while (end > begin){
15         tmp = str[begin];
16         str[begin++] = str[end];
17         str[end--] = tmp;
18     }
19     // 第二步:进行部分翻转,只翻转单词的顺序
20     i = 0;
21     while (i < len){
22         if (str[i] != ' '){
23             begin = i; // 单词起始位置
24             while (str[i] != '\0' && str[i] != ' ') i++;// 寻找单词结束位置
25             end = i - 1;// i指向空格位置
26         }
27         // 部分翻转
28         while (end > begin){
29             tmp = str[begin];
30             str[begin++] = str[end];
31             str[end--] = tmp;
32         }
33         i++;// 指向下一个单词
34     }
35 }
36 
37 int main(void)
38 {
39     char str[] = "I come from Beijing.";
40     reverseSentence(str);
41     printf("Reverse: %s\n", str);
42 
43     return 0;
44 }

 

posted @ 2015-07-18 15:41  XiaoManon  阅读(685)  评论(0编辑  收藏  举报