[剑指offer]翻转句子 ; 左旋字符串
2016-04-07 16:08
381 查看
/* 42:> 翻转句子 ; 左旋字符串 i am student -> student am i (整体翻转,局部翻转) */ void Reserve(char* pBegin, char* pEnd) { if (pBegin == NULL || pEnd == NULL || pBegin+1==pEnd) return; while (pBegin < pEnd) { std::swap(*pBegin,*pEnd); pBegin++; pEnd--; } } void ReserveSentense(char* pData) { if (pData == NULL) return; char* pBegin = pData; char* pEnd = pBegin; while (*pEnd != '\0') pEnd++; pEnd--; //指向尾 Reserve(pBegin, pEnd);//整体翻转 pEnd = pBegin = pData; while (*pBegin != '\0') { if (*pBegin == ' ') { pBegin++; pEnd++; } else if (*pEnd == ' ' || *pEnd == '\0') { Reserve(pBegin, --pEnd); pBegin = ++pEnd; } else ++pEnd; } } //void test() //{ // //char ar[] = "i am a student"; // char ar[] = " i am a student"; // ReserveSentense(ar); // cout << ar /*<< endl*/; //} /* 左旋单词 abcdefg ->2 -> cdefgab 分两部分 ab cdefg 整体翻转 部分翻转 */ void LeftRotateStr(char*pStr, int n) { if (pStr == NULL || n<= 0) return; int len = strlen(pStr); n %= len;//大于长度会指向非法内存 char* pFirstStart = pStr; char* pFirstEnd = pStr + n - 1; char* pSecondStart = pStr + n; char* pSecondEnd = pStr + len - 1; Reserve(pFirstStart, pFirstEnd); Reserve(pSecondStart, pSecondEnd); Reserve(pFirstStart, pSecondEnd); } //void test() //{ // char ar[] = "i am a student"; // // LeftRotateStr(ar,15); // cout << ar << endl; //}
相关文章推荐
- [剑指offer]和为s的两个数 ; 和为s的连续正整数序列
- 【剑指offer系列】 调整数组顺序使奇数位于偶数前面___14
- HTML文档中嵌入CSS的三种常用方式
- [剑指offer]数组中只出现一次的数(2个)(其他都出现2次)
- [剑指offer]二叉树深度vs判断平衡二叉树
- MVVM With ReactiveCocoa
- [剑指offer]数字在排序数组中出现的次数
- [剑指offer]两个链表公共节点
- 固定div,css固定
- 如果一个游戏上面加一个透明层,js能不能实现 点击透明层的任意点 而正常玩游戏
- .jshintrc 安装方式与作用
- [剑指offer]数组中的逆序对
- [剑指offer]丑数
- 【JQuery UI】面板折叠插件——accordion
- [剑指offer]把数组排列成最小的数
- [剑指offer]连续子数组最大和
- 通过修改manifest文件来解决Vista/Win7/Win8/win10下应用程序兼容性问题
- js类式继承与原型式继承详解
- 工作笔记之复杂字符串的json解析,使用gson
- [剑指offer:30]最小的k个数