主要思路:
先交换整个句子的顺序,再交换每个单词的顺序。
一下代码在VS2015中调试无误
#include "stdafx.h"
#include<iostream>
using namespace std;
void Reverse(char *pBegin, char *pEnd)
{
if (NULL == pBegin || NULL == pEnd)
return;
while (pBegin < pEnd)
{
char temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
pBegin++, pEnd--;
}
}
char* ReverSentence(char *pData)
{
if (NULL == pData)
return NULL;
char *pBegin = pData;
char *pEnd = pData;
while (*pEnd != '\0')
pEnd++;
pEnd--;
//反转整个句子
Reverse(pBegin, pEnd);
//反转每个单词
pBegin = pEnd = pData;
while (*pBegin != '\0')
{
if (*pBegin == ' ')
{
pBegin++;
pEnd++;
}
else if (*pEnd == ' ' || *pEnd == '\0')
{
Reverse(pBegin, --pEnd);
pBegin = ++pEnd;
}
else
{
pEnd++;
}
}
return pData;
}
int main()
{
char input[]="i am a student.";
printf("input is : \n %s \n", input);
if (NULL != ReverSentence(input))
printf("after reverse is:\n %s \n",input);
while (1);
return 0;
}