题目:将一个句子反转顺序,要求原位操作。例如:“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++;
}
}
两个函数组合使用,便可实现句子的反转。