左移字符串有多种方法,这里只介绍两种方法。

方法一、

一个字符一个字符的左移,先将第一个字符保存起来,然后将后面的每一个字符都向前移一个字符,‘\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;
}