// 面试题58(二):左旋转字符串
// 题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
// 请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数
// 字2,该函数将返回左旋转2位得到的结果"cdefgab"。 #include <iostream>
#include <string> void Reverse(char *pBegin, char *pEnd); char* LeftRotateString(char* pStr, int n)
{
if (pStr != nullptr)//防止为空,这很重要
{
int nLength = static_cast<int>(strlen(pStr));
if (nLength > && n > && n < nLength)
{
char* pFirstStart = pStr;//设置两段,前n个为一段
char* pFirstEnd = pStr + n - ;
char* pSecondStart = pStr + n;//后面为一段
char* pSecondEnd = pStr + nLength - ; // 翻转字符串的前面n个字符
Reverse(pFirstStart, pFirstEnd);
// 翻转字符串的后面部分
Reverse(pSecondStart, pSecondEnd);
// 翻转整个字符串
Reverse(pFirstStart, pSecondEnd);
}
} return pStr;
} void Reverse(char *pBegin, char *pEnd)//交换子函数
{
if (pBegin == nullptr || pEnd == nullptr)
return; while (pBegin < pEnd)
{
char temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp; pBegin++, pEnd--;
}
}
// ====================测试代码====================
void Test(const char* testName, char* input, int num, const char* expectedResult)
{
if (testName != nullptr)
printf("%s begins: ", testName); char* result = LeftRotateString(input, num); if ((input == nullptr && expectedResult == nullptr)
|| (input != nullptr && strcmp(result, expectedResult) == ))
printf("Passed.\n\n");
else
printf("Failed.\n\n");
} // 功能测试
void Test1()
{
char input[] = "abcdefg";
char expected[] = "cdefgab"; Test("Test1", input, , expected);
} // 边界值测试
void Test2()
{
char input[] = "abcdefg";
char expected[] = "bcdefga"; Test("Test2", input, , expected);
} // 边界值测试
void Test3()
{
char input[] = "abcdefg";
char expected[] = "gabcdef"; Test("Test3", input, , expected);
} // 鲁棒性测试
void Test4()
{
Test("Test4", nullptr, , nullptr);
} // 鲁棒性测试
void Test5()
{
char input[] = "abcdefg";
char expected[] = "abcdefg"; Test("Test5", input, , expected);
} // 鲁棒性测试
void Test6()
{
char input[] = "abcdefg";
char expected[] = "abcdefg"; Test("Test6", input, , expected);
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
system("pause");
return ;
}

《剑指offer》第五十八题(左旋转字符串)的更多相关文章

  1. 《剑指offer》第二十八题(对称的二叉树)

    // 面试题28:对称的二叉树 // 题目:请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和 // 它的镜像一样,那么它是对称的. #include <iostream> ...

  2. 《剑指offer》第十八题(删除链表中重复的结点)

    // 面试题18(二):删除链表中重复的结点 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 // 结点被删除之后,链表如图3.4(b)所示. #include &l ...

  3. 《剑指offer》第十八题(在O(1)时间删除链表结点)

    // 面试题18(一):在O(1)时间删除链表结点 // 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该 // 结点. #include <iostream> ...

  4. (剑指Offer)面试题42:左旋转字符串

    题目: 字符串的左旋转操作是把字符串前面的若干字符转移到字符串的后面.请定义一个函数实现字符串左旋转操作的功能, 比如:输入字符串"abcdefg"和数字2,该函数将返回左旋转2位 ...

  5. 《剑指offer》面试题58 - II. 左旋转字符串

    问题描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两 ...

  6. 剑指Offer(二十八):数组中出现次数超过一半的数字

    剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  7. 《剑指offer》第二十六题(树的子结构)

    // 面试题26:树的子结构 // 题目:输入两棵二叉树A和B,判断B是不是A的子结构. #include <iostream> struct BinaryTreeNode { doubl ...

  8. 《剑指offer》第十九题(正则表达式匹配)

    // 面试题19:正则表达式匹配 // 题目:请实现一个函数用来匹配包含'.'和'*'的正则表达式.模式中的字符'.' // 表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次).在本题 ...

  9. 《剑指offer》第二十九题(顺时针打印矩阵)

    // 面试题29:顺时针打印矩阵 // 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. #include <iostream> void PrintMatrixInC ...

  10. 《剑指offer》第二十四题(反转链表)

    // 面试题24:反转链表 // 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的 // 头结点. #include <iostream> #include &quo ...

随机推荐

  1. Linux使用退格键时出现^H解决方法

    以前在linux下执行脚本不注意输错内容需要删除时总是出现^H ,以前不知道真相的我没办法只有再重头运行一次脚本,后来发现其实时有解决办法的,所以记录一下. ^H不是H键的意思,是backspace. ...

  2. P2765 魔术球问题

    P2765 魔术球问题 贪心模拟就可以过.........好像和dinic没啥关系   找找规律发现可以贪心放.n又灰常小. 设答案=m 你可以$O(mn)$直接模拟过去 闲的慌得话可以像我用个$se ...

  3. windows下vc编译和debug nginx

    总体来说,各个步骤以及版本参考官方文档http://nginx.org/en/docs/howto_build_on_win32.html一点没错,有些细节没说清楚. To build nginx: ...

  4. mongodb安装、远程访问设置、基本常用操作和命令以及GUI

    https://www.mongodb.com/download-center?jmp=nav下载对应OS的版本,tar -xzvf解压 对于最新版本比如3.4,windows 7下可能回报api-m ...

  5. 微信小程序细节

    微信小程序开发几个细节: 1.界面传值 ①全局参数传值 <!--结果--> <view wx:for="{{data}}" class="case pr ...

  6. (4opencv)对OpenCV中“旋转”的思考和实验

    ​    我记得曾经有人对OpenCV的旋转吐槽,意思是它自己没有很好的关于选择的算法.在新的版本里面添加了这些函数(我还没有时间去看是什么时候pr的).现在一个比较棘手的问题,就是OpenCV中旋转 ...

  7. Spring 学习历程(二)

    JUnit测试 maven导入包 <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> &l ...

  8. Markdown语法参考

    参考博客: https://www.jianshu.com/p/f3147a804368 https://www.jianshu.com/p/191d1e21f7ed https://www.jian ...

  9. X-Pack for the Elastic Stack [6.2] » Securing the Elastic Stack »Setting Up User Authentication

    https://www.elastic.co/guide/en/x-pack/current/setting-up-authentication.html Active Directory User ...

  10. 【Spring Security】六、自定义认证处理的过滤器

    这里接着上一章的自定义过滤器,这里主要的是配置自定义认证处理的过滤器,并加入到FilterChain的过程.在我们自己不在xml做特殊的配置情况下,security默认的做认证处理的过滤器为Usern ...