问题描述:
将一个句子中的单词逆转问题,例如:“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 }