// 面试题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 > 0 && n > 0 && n < nLength){char* pFirstStart = pStr;//设置两段,前n个为一段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;
}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) == 0))printf("Passed.\n\n");elseprintf("Failed.\n\n");
}// 功能测试
void Test1()
{char input[] = "abcdefg";char expected[] = "cdefgab";Test("Test1", input, 2, expected);
}// 边界值测试
void Test2()
{char input[] = "abcdefg";char expected[] = "bcdefga";Test("Test2", input, 1, expected);
}// 边界值测试
void Test3()
{char input[] = "abcdefg";char expected[] = "gabcdef";Test("Test3", input, 6, expected);
}// 鲁棒性测试
void Test4()
{Test("Test4", nullptr, 6, nullptr);
}// 鲁棒性测试
void Test5()
{char input[] = "abcdefg";char expected[] = "abcdefg";Test("Test5", input, 0, expected);
}// 鲁棒性测试
void Test6()
{char input[] = "abcdefg";char expected[] = "abcdefg";Test("Test6", input, 7, expected);
}int main(int argc, char* argv[])
{Test1();Test2();Test3();Test4();Test5();Test6();system("pause");return 0;
}

转载于:https://www.cnblogs.com/CJT-blog/p/10544865.html

《剑指offer》第五十八题(左旋转字符串)相关推荐

  1. 剑指Offer:翻转单词顺序 vs 左旋转字符串

    题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内部的顺序不变.为简单起见 ,标点符号和普通字母一样处理.例如输入字符串"I am a student. ",则输出" ...

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

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

  3. 牛客网(剑指offer) 第十八题 二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. <?php/*class TreeNode{var $val;var $left = NULL;var $right = NULL;fun ...

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

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

  5. 剑指Offer LeetCode 面试题58 - II. 左旋转字符串

    面试题58 - II. 左旋转字符串 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和 ...

  6. 统计数组中每个数字出现的次数_剑指Offer(二十八) 数组中次数出现超过一半的数字...

    题目描述 思路与解析 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长 ...

  7. 牛客网(剑指offer) 第二十二题 从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. <?php/*class TreeNode{var $val;var $left = NULL;var $right = NUL ...

  8. 牛客网(剑指offer) 第十九题 顺时针打印矩阵

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...

  9. 牛客网(剑指offer) 第十六题 合并两个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. <?php /*class ListNode{var $val;var $next = N ...

  10. 牛客网(剑指offer) 第十四题 链表中倒数第k个节点

    //题目描述:输入一个链表,输出链表该链表中倒数第k个节点. <?php /*class ListNode{var $val;var $next = NULL;function __constr ...

最新文章

  1. Ajax+Node.js前后端交互最佳入门实践(05)
  2. HelloWorld 和相关设置
  3. MyBatis 实际使用案例-typeAliases
  4. 双极型adc与stm32_关于STM32 双ADC同步规则转换两路数据的问题?
  5. Hotspot hotswap, who and who are best freinds
  6. 三分钟撸完前后端crypto-js加解密,你学废了吗?
  7. 泛型集合 有序泛型 c#
  8. 让所有的实体店成为网店的体验店
  9. Mysql整库导出导入
  10. 基于DOS的ipc$最详攻略。
  11. 如何在网页中弹出的模式窗口,就像C/S中的SHOWMODAL类型窗口
  12. python源码中的学习笔记_第11章_模块与包
  13. 杭州29岁IT男凌晨突发脑出血!老父亲面对医生急的差点跪下
  14. *第八周*数据结构实践项目四【字符串加密】
  15. TIF图片转bitmap的两种方式(C#)
  16. 容器技术Docker K8s 36 容器服务ACK基础与进阶-应用与发布管理
  17. AdBlock插件自定义拦截规则
  18. 企业如何建立强大的绩效管理系统
  19. 怎么自学编程python_怎样自学Python编程?
  20. Android 蓝牙强度Rssi

热门文章

  1. MAC查看系统版本的命令
  2. Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!
  3. 同样是百度输入法,定制远没有原版好用
  4. libx264.c:function X264_init: error: undefined reference to x264_encoder_open_142
  5. java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory
  6. 多重继承有时候确实有必要
  7. 客气话要靠谱。比如公司业务一直没开展,却说学到了太多东西,那学的难道是怎样把公司搞死?
  8. 最土家乡话,莫过于栖霞
  9. python简述题_常见Python面试题-附答案
  10. 计算机应用基础选择题占多少分,计算机应用基础练习题(选择题部分)..doc