#include<iostream>
using namespace std;
char* RevStr(char *src)
{
char *start = src, *end = src, *ptr = src;
while (*ptr++ != '\0');
end = ptr - 2; //end指向句子的最后一个字母
while (start < end)
swap(*start++, *end--);
start = src, end = ptr - 2; //start和end重新指向置逆后的句子头和尾
ptr = start; //ptr是控制每一个单词的
while (*ptr++ != '\0') //到句子的最后,控制循环
{
if (*ptr == ' ' || *ptr == '\0') //每一个单词
{
end = ptr - 1; //end指向每个单词的最后一个字母
while (start < end)
swap(*start++, *end--);
start = end = ptr + 1; //指向下一个单词开头
}
}
return src;
}
int main()
{
char src[] = "I am from Sichuan";
cout << "after reverse is: " << RevStr(src) << endl;
return 0;
}
思想:
先把字符串整体反转,再以每个单词为界限(空格或结束符控制)实现局部反转。