左旋转字符串,给定一个字符串,把它的前M个字符放到它的尾部,其他字符依次前移

  1. 比如给定一个一个字符串abcdef,m=2,那么左旋转之后的字符串味cdefab

  2. 第一种方法保存第一个字符key,其他字挨个挨个的前移,最后key放到最后即可。

  3. 实现代码如下:

  4. #include
    using namespace std;
    void leftCircleStr(char *str, int m)
    {
    int len = strlen(str);
    cout << len << endl;
    for (int i = 0; i < m; i++)
    {
    char key = str[0];
    for (int j = 1; j < len; j++)
    {
    str[j - 1] = str[j];
    }
    str[len - 1] = key;
    }
    }
    int main()
    {
    char str[20] = “abcdefg”;
    leftCircleStr(str, 2);
    cout << str << endl;
    system(“pause”);
    return 0;
    }
    第二种方法,我们可以要把字符串分为XY两部分,X是要移动到Y后面的元素。XT是把X翻转(比如abc 转换为cba),(XT)T=X。我们需要求得就是YX。(XTYT)T=(YT)T(XT)T=YX了。操作就是我们先把X翻转,Y翻转,然后把整体字符串翻转,然后再把Y翻转X翻转。即可。
    直接给出代码:
    #include
    using namespace std;
    void leftCircleStr(char *str, int m)
    {
    int len = strlen(str);
    cout << len << endl;
    for (int i = 0; i < m; i++)
    {
    char key = str[0];
    for (int j = 1; j < len; j++)
    {
    str[j - 1] = str[j];
    }
    str[len - 1] = key;
    }
    }
    void reverseStr(char *begin, char *end)
    {
    while (begin < end)
    {
    char temp = *begin;
    *begin = *end;
    *end = temp;
    begin++;
    end–;
    }
    }
    void leftCircleStr_T(char *str, int m)
    {
    int len = strlen(str);
    char *begin1 = str;
    char *end1 = str + m - 1;
    char *begin2 = str + m;
    char *end2 = str + len - 1;
    reverseStr(begin1, end1);
    reverseStr(begin2, end2);

    char *begin = str;
    char *end = str + len - 1;
    reverseStr(begin, end);
    }
    int main()
    {
    char str[20] = “abcdefg”;
    leftCircleStr_T(str, 2);
    cout << str << endl;
    system(“pause”);
    return 0;
    }
    第一种方法比较好理解比较好想到,第二种方法比较巧妙,利用类似于矩阵翻转的一些思想。很想巧妙。不过涉及到字符串翻转之类的问题,这个翻转的方法还是可以多考虑一下的啊。
    直接过如下图所示:
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值