主要思路:
和前面逆转单词顺序方法差不多,甚至更简单,只需要调用三次逆转字符串的函数即可。先分别逆转两部分,再逆转整个字符串。
以下代码在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,int num)
{
if (NULL == pData || num <=0)
return NULL;
char *pBegin = pData;
char *pEnd = pData+num-1;
//int nLength = static_cast<int>(strlen(pData));
//分别反转两部分
Reverse(pBegin, --pEnd);
pBegin = ++pEnd;
while (*pEnd != '\0')
pEnd++;
Reverse(pBegin, --pEnd);
//反转整个句子
pBegin = pData;
Reverse(pBegin, pEnd);
return pData;
}
int main()
{
char input[]="abcdefghi";
int num = 4;
printf("input is : \n %s \n", input);
if (NULL != ReverSentence(input, num))
printf("after reverse is:\n %s \n",input);
while (1);
return 0;
}