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