1 题目
字符串的左旋转操作是把字符串前面的若干字符转移到字符串尾部,比如字符串abcdef和数字2,函数返回左旋转得到的结果是cdefgab
2 思路
先反转字符串所有,通过数字n找到的边界 ,然后再反转字符串部分左边和部分右边。
3 代码实现
#include <stdio.h>/** 反转整个字符串*/
void reverse(char *begin, char *end)
{if (NULL == begin || NULL == end)return;while (begin < end){char temp = *end;*end = *begin;*begin = temp;++begin;--end;}
}/** 左旋转字符串* abcdefg* gfedcba* cdefgab*/
char* leftReverse(char *str, int n)
{if (str == NULL || n < 0){return NULL;}//先反转所有字符串char *begin = str;char *end = str;int len = 0, count = n;while (*end != '\0'){++end;++len;}if (n > len){return NULL;}end--;reverse(begin, end);begin = str;//移动end到左右反转分界地方while (n > 0){--n;--end;}//反转左边一部分reverse(begin, end);//反转右边一部分reverse(end + 1, end + count);return str;
}int main()
{char b[] = "abcdefg";char *result = NULL;result = leftReverse(b, 2);printf("%s\n", result);return 0;
}
4 运行结果
cdefgab