例如:abcd左旋一个字符得到bcda,abcd左旋两个字符得到cdab 1.数组下标法

#include<stdio.h>
#include<string.h>

void left_handed(char *str, int k)
{
	int i;
	int count = 0;
	char temp;
	while (count < k)
	{
		temp = str[0];
		for (i = 0; i < strlen(str)-1; i++)
		{
			str[i] = str[i + 1];//所有字符左移一位
		}
		count++;
		str[strlen(str) - 1] = temp;
	}
}
int main()
{
	int k=0;
	char str[] = "abcdef";
	printf("输入需要左旋多少个字符:\n");
	scanf("%d",&k);
	left_handed(str,k);
	printf("%s",&str);
	return 0;
}

2.指针法

#include<stdio.h>

void left_move(char *str, int k)
{
	while (k--)//相当于k!=0
	{
		char *cur = str;//定义一个指针,存储字符串首地址
		char tmp=*cur;
		while ((*(cur+1)) != '\0')
		{
			*cur = *(cur + 1);//字符串左移一位
			cur++;
		}
		*(cur) = tmp;
	}
}
int main()
{
	char str[] = "abcd";
	int k = 0;
	printf("请输入左移位数:\n");
	scanf("%d",&k);
	left_move(str, k);
	printf("%s",str);
	return 0;
}

3.指针==》逆序法

#include<stdio.h>
#include<string.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 k, int len)//左旋函数
{
	char *left = str;
	char *right = str+len - 1;
	if (k<0 || k>len)
	{
		printf("不合法!\n");
	}
	else
	{
		Reverse(left, str+k-1);//地址,需要逆序的左右位置
		Reverse(str+k , right);
		Reverse(left, right);
	}
}
int main()
{
	int k;
	printf("请输入左移位数:\n");
	scanf("%d",&k);
	char str[] = "abcd";
	int len = strlen(str);
	left_move(str,k,len);
	printf("%s",str);
	return 0;
}