当前位置:网站首页>[C language] string left rotation

[C language] string left rotation

2022-07-06 06:11:00 SouLinya


subject

Implement a function , You can rotate left in a string k Characters .
for example :
ABCD Turn a character left to get BCDA
ABCD Two left-handed characters get CDAB

One 、 Solution 1 : Violent solution

 Pictures from other blogs

#include<stdio.h>
#include<string.h>
void Swap_arr(char* arr, int k)
{
    
	int len = strlen(arr);
	int i = 0;
	for (i = 0; i < k; i++)
	{
    
	    // Keep the first element address 
		char temp = *arr;
		int j = 0;
		// Character forward 
		for (j = 0; j < len - 1; j++)
		{
    
			*(arr + j) = *(arr + j + 1);
		}
		// Finally, assign the end character to the first element 
		*(arr + len - 1) = temp;
	}
}
int main()
{
    
	char arr[] = "abcdef";
	int k;
	scanf("%d", &k);
	Swap_arr(arr, k);
	printf("%s", arr);
	return 0;
}

Two 、 Solution 2 : Three step flipping

Ideas :
Suppose there are two left-handed characters
1. First reverse the first two characters
bacdef
2. The last four characters in reverse order
bafedc
3. The whole in reverse order
cdefab

#include<stdio.h>
// String reverse order function 
void reverse(char* left, char* right)
{
    
	while (left < right)
	{
    
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}
void Swap_arr(char* arr, int k)
{
    
    // Calculate string length 
	int len = strlen(arr);
	// In reverse order . Pay attention to the transmitted parameters 
	reverse(arr, arr + k - 1);
	// After reverse order 
	reverse(arr + k, arr + len - 1);
	// The whole in reverse order 
	reverse(arr, arr + len - 1);
}
int main()
{
    
	char arr[] = "abcdef";
	int k;
	scanf("%d", &k);
	Swap_arr(arr, k);
	printf("%s\n", arr);
	return 0;
}

3、 ... and . Solution 3 : Splicing

Ideas : utilize strcpy String copy function and strncat String append function
ab cdef ab cdef

#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
void Swap_arr(char* arr, int k)
{
    
	assert(arr != NULL);
	int len = strlen(arr);
	// Subscript of off position 
	int pos = k % len;
	// Dynamic memory opens up space :len+1 The reason is that strings and '\0' character 
	char* p = (char*)malloc((len+1) * sizeof(char));
	if (p == NULL)
	{
    
		printf("%s\n", strerror(errno));
	}
	else
	{
    
		// Copy the following first cdef
		strcpy(p, arr + pos);
		// Copy the previous ab
		strncat(p, arr, pos);
		// Copy to the source string 
		strcpy(arr, p);
	}
}
int main()
{
    
	char arr[] = "abcdef";
	int k;
	scanf("%d", &k);
	Swap_arr(arr, k);
	printf("%s\n", arr);
	return 0;
}
原网站

版权声明
本文为[SouLinya]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060558217841.html