左移字符串有多种方法,这里只介绍两种方法。
方法一、
一个字符一个字符的左移,先将第一个字符保存起来,然后将后面的每一个字符都向前移一个字符,‘\0’不移,要想移n个字符,就这样循环n次就好了。
方法二、
先将左移的前n个字符翻转,然后将剩余的一串字符翻转,最后将所有的字符再翻转一次,用三次翻转就可以将n个字符左移。这种方法比前一种方法效率要好一些。
方法一的代码如下:
#include<stdio.h> #include<assert.h> #include<string.h> void rotate_left(char *str, int n) { assert(str); int i = 0; char left =0; int len = strlen(str); while (n > 0) { i = 0; left = *str; while (i<len-1) { str[i] = str[i + 1]; i++; } str[i] = left; n--; } } int main() { int n = 0; char str[] = { 0 }; printf("请输入字符串:"); gets(str); printf("请输入左旋次数:"); scanf("%d", &n); rotate_left(str, n); printf("左旋后的字符串为:"); puts(str); system("pause"); return 0; }
方法二的代码如下:
#include<stdio.h> void reverse(char *left,char *right) { while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } void left_move(char *str, int n) { int len = strlen(str); reverse(str, str + n - 1); reverse(str + n, str + len - 1); reverse(str, str + len - 1); } int main() { char str[] = "abcdef"; int n = 0; scanf("%d", &n); left_move(str, n); printf("%s", str); system("pause"); return 0; }