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