Enter a function to realize left rotation of string - C language

Title: Implement a function that can left-rotate k characters in a string

Requirement: Left-rotate abcd by one character to get bcda

           abcd rotate two characters to the left to get cdab 

Method ①: Create temporary variables

#include<stdio.h>
void left_move(char arr[], int k)
{
	int len = strlen(arr);

	int j = 0;
	for (j = 0; j < k%len; j++)//移动一组字符   %len移动余数  例 输入8  只移动2个
	{
		//一个字符的移动
		char tmp = arr[0];//创建临时变量储存先取走的字符
		int i = 0;
		for (i = 0; i < len - 1; i++)
		{
			//将字符串后面的元素向前移动
			arr[i] = arr[i + 1];
		}
		arr[len - 1] = tmp;
	}

}


int main()
{
	//左旋转字符代码
	char arr[] = "abcdef";
	int k = 0; //假如逆序k个元素
	scanf("%d", &k);

	left_move(arr, k);

	printf("%s", arr);
	return 0;
}

Method ②: Reverse string method

#include<stdio.h>
void revese(char* left , char* right)
{
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

void left_move(char arr[], int k)
{
	int len = strlen(arr);
	k %= len;//防止越界访问,所以取余数
	revese(arr, arr + k - 1);
	revese(arr + k, arr + len - 1);
	revese(arr, arr + len - 1);
}

int main()
{
	//左旋转字符代码
	char arr[] = "abcdef";
	//逆序字符串的方法
	//abcdef   假设k=2
	//ba fedc  先把前两个逆序  再把后四个逆序
	//cdef ab  然后再把这两组逆序

	int k = 0;
	scanf("%d", &k);

	left_move(arr, k);

	printf("%s", arr);
	return 0;
}

Guess you like

Origin blog.csdn.net/m0_73969113/article/details/130674835