您的位置:首页 > Web前端

剑指offer——翻转单词顺序VS左旋转字符串

2014-09-06 21:48 411 查看
字符串的交换等,注意判断字符串的是否为NULL,以及判断边界等。

#include <iostream>
#include <string>
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;
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;
}

char* LeftRotateString(char *pStr,int n)
{
if (pStr==NULL)
{
return NULL;
}
int nLength=static_cast<int>(strlen(pStr));
if (nLength>0&&n>0&&n<nLength)
{
char* pFirstStart=pStr;
char* pFirstEnd=pStr+n-1;
char* pSecondStart=pStr+n;
char* pSecondEnd=pStr+nLength-1;
Reverse(pFirstStart,pFirstEnd);
Reverse(pSecondStart,pSecondEnd);
Reverse(pFirstStart,pSecondEnd);
}
return pStr;
}

int main()
{
char str[]="hello world";
cout<<ReverseSentence(str)<<endl;
cout<<LeftRotateString(str,3)<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: