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