题目:将一个句子反转顺序,要求原位操作。例如:“i love c++”--->“c++ love i”。
思路:先把整个字符串进行反转,这样的后果是每个单词内部也被反转,然后再调整单词内部。
"i love c++"--->"++c evol i"--->"c++ love i"
两次反转对应两个函数:allReverse(), wordReverse().
//整个字符串的反转 void allReverse(char *s) { int i = 0, j = strlen(s) - 1;//别忘了减1 char tmp; while (j > i) { tmp = s[i]; s[i++] = s[j]; s[j--] = tmp; } }
//所有单词反转 void wordReverse(char *s) { int i = 0, begin, end; char tmp; while (s[i]) { //用begin和end卡住一个单词 if (s[i] != ' ') { begin = i; while (s[i] && s[i] != ' ') { i++; } i = i - 1; end = i; } //反转该单词 while (begin<end) { tmp = s[begin]; s[begin++] = s[end]; s[end--] = tmp; } i++; } }两个函数组合使用,便可实现句子的反转。