剑指offer——面试题42:翻转单词顺序VS左旋转字符串
2016-12-11 21:52
549 查看
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)
{
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;
}
相关文章推荐
- 如何提高程序员的生产率 (2)
- [读书笔记]程序员的自我修养 chp11
- 程序员的口头禅:技术上无法实现
- 程序员的口头禅:技术上无法实现
- 修炼一名程序员的职业水准_转
- 剑指offer——面试题41:和为s的两个数字VS和为s的连续正数序列
- 腾讯后台开发面试经验
- 剑指offer——面试题40:数组中只出现一次的数字
- 软件架构师考试、软件架构师经历、软件架构师求职
- 给初级程序员的一封信
- 给初级程序员的一封信
- 阿里java面试全程经验
- [Java面试十二]数据库概念相关
- [Java面试十一]数据库总结.
- [Java面试十]浏览器跨域问题.
- [Java面试九]脚本语言知识总结.
- [Java面试四]Strust2总结及在面试中的一些问题.
- [Java面试一]面试复习大纲.
- [Java面试七]Mybatis总结以及在面试中的一些问题.
- [面试没有回答上的问题4]常用字符串和数组的操作。