#include <iostream>
using namespace std;
//翻转一个字符串
void Reverse(char *pBegin,char *pEnd)
{
if(pBegin == NULL || pEnd == NULL)
{
return ;
}
while(pBegin < pEnd)
{
char temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
pBegin++,pEnd--;
}
}
//翻转句子
char *ReverseSentence(char *pData)
{
if(pData == NULL)
{
return NULL;
}
char *pBegin = pData;
char *pEnd = pData;
//让pEnd指向最后一个字符
while(*pEnd != '\0')
{
pEnd++;
}
pEnd--;
//翻转整个句子
Reverse(pBegin,pEnd);
//指针复原,重新指向字符串开头
pBegin = pEnd = pData;
while(*pBegin != '\0')
{
//跳过开头的空格。
if(*pBegin == ' ')
{
pBegin++;
pEnd++;
continue;
}
else if(*pEnd==' ' || *pEnd=='\0')
{
//遇到空格或者结尾标记时,后退到最后一个字符上,然后翻转。。。
Reverse(pBegin,--pEnd);
//将pBegin设置到下一个单词的首字母上。。。
pBegin = ++pEnd;
}
else
{
pEnd++;
}
}
return pData;
}
void main()
{
char str[] = " i am a superman ";
ReverseSentence(str);
puts(str);
}
【100题】翻转句子中单词的顺序
最新推荐文章于 2021-02-04 14:10:25 发布