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

将一句话里的单词进行倒置,标点符号不倒置。比如一句话: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 }

 

你可能感兴趣的:(字符串)