题目描述:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a
 student. “,则输出"student. a am I”。

实战大门:题目链接
这到题在剑指Offer里身价从中等降到了简单,可见这Offer不是那么简单搞到的,如题目要要求,需要反序反序输出语句,但是单词本身顺序不变。
源码分析????
char* reverseWords(char* s){
int len = strlen(s);
char* arr =(char*) malloc(sizeof(char)* (len+1));
char* brr =(char*)malloc(sizeof(char)*(len+1));
int a = 0;
int b = len-1;
int c = 0;
while(b>=0)  //逆序遍历
{
    while((b>=0)&&*(s+b)!=' ')  //逐个找出单词
    {
        *(brr+a)=*(s+b);  //将找到的单词存进brr数组中
        a++;
        b--;
    }
    a--;
    if(c > 0)
    {
      *(arr+c) = ' ';
      c++;  //计数空格
    }
    while(a>=0)
    {
        *(arr+c)=*(brr+a);
        a--;
        c++;
    }   //将brr数组信息转到数组arr中
    a=0;
    while(b>=0&&*(s+b)==' ')  //移除s的空格
    {
       b--;
    }
}
*(arr+c)='\0';  //添加结束标志
free(brr);  //释放数组brr
return arr;
}这里我们的基本思路依然采用双指针,malloc时多一位保证空间足够,我们既然要逆序输出就直接逆序读取,强调一下C语言对空间的要求十分敏感,这也是后面释放brr数组的原因,很容易造成堆栈,栈溢出问题,所以要谨慎细节。










