删除文章

确定要删除这篇文章吗?

取消
确定

将一个长度为n的字符串向左循环移动m位

     阅读(429)  2017-10-24 20:08:06


// 将一个长度为n的字符串向左循环移动m位,如:hello,world向左移动3位就变成了lo,worldhel
// 思路:把字符串切成长为m和n-m的两半,先分别对两部分进行逆序,最后对整个字符串逆序。

#include <iostream>
using namespace std;


void ReverseString(char * const str, const int count);

void RotateLeft(char *str, int num);

int _tmain(int argc, char *argv[])
{
    char str[] = "hello,world";

    RotateLeft(str, 3);
    
    cout << str << endl;

    getchar();
    return 0;
}

void ReverseString(char * const str, const int count)
{
    if (str == NULL || count < 2)
    {
        return;
    }

    char *start = str;
    char *end = str + count - 1;
    char tmp;

    while (end > start)
    {
        tmp = *end;
        *end = *start;
        *start = tmp;

        start++;
        end--;
    }
}

void RotateLeft(char *str, int num)
{
    if (str == NULL || num < 1)
    {
        return;
    }
    
    int length = (int)strlen(str);

    num = (num + length) % length;

    char *left = str;
    char *right = str + num;

    ReverseString(left, num);
    ReverseString(right, length - num);
    ReverseString(str, length);
}

文章评论

Keep it simple,stupid
文章数
300
总访问量
442977
今日访问
866
最近评论

xuehaoyun : 很不错,来围观一下
tujiaw : 抱歉csdn code服务关闭了,这个代码我也找不到了
于淞 : 你好,这个文章的源码能分享一下吗,songsong9181@163.com,谢谢了 上面的写错了
于淞 : 你好,这个文章的源码能分享一下吗,838106303@163.com,谢谢了 上面的链接不能用了
tujiaw : 多谢多谢
essaypinglun college-paper.org : 很好的博客,赞赞
Folly : 这个实现有点奇怪,Qt为什么没有统一的比对方法。
过多s : alert("hello, world!")
tujiaw : 还不错哦
回到顶部