您的位置:首页 > 其它

42.翻转单词顺序VS左旋转字符串

2015-07-10 21:28 393 查看








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);

}

else

{

pEnd++;

}

}

return pData;

}









char* LeftRotateString(char* pStr, int n)

{

if (pStr != 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;

//翻转字符串的前面n个字符

Reverse(pFirstStart, pFirstEnd);

//翻转字符串的后面部分

Reverse(pSecondStart, pSecondEnd);

//翻转整个字符串

Reverse(pFirstStart, pSecondEnd);

}

}

return pStr;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: