您的位置:首页 > 其它

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

2011-09-08 11:52 204 查看
// 将一个长度为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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐