c语言-字符串旋转

2023年6月12日13:09:36
/*
题目名称:
字符串左旋
实现一个函数,可以左旋字符串中的k个字符。
例如 :
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
*/

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>

//方法一
void LeftMove1(char* a, int k)
{
	int n = strlen(a);
	int i = 0, j = 0;
	for (i = 0; i < k; i++)
	{
		char t = *a;
		for (j = 0; j < n - 1; j++)
		{
			*(a + j) = *(a + j + 1);
		}
		*(a + n - 1) = t;
	}
}

void Reverse(char* left, char* right)  //翻转
{
	while (left < right)
	{
		char t = *left;
		*left = *right;
		*right = t;
		left++;
		right--;
	}
}

//方法二
void LeftMove2(char* a, int k)  //三步翻转法
{
	int n = strlen(a);      //字符串:FGHIJ     左旋2个元素
	Reverse(a, a + k - 1);  //左边翻转 FG -> GF
	Reverse(a + k, a + n - 1);  //右边翻转 HIJ -> JIH
	Reverse(a, a + n - 1);  //整体翻转 GFJIH -> HIJFG
}

int main()
{
	char arr1[] = "ABCDE";
	char arr2[] = "FGHIJ";
	char arr3[] = "KLMNO";
	int k = 2;
	LeftMove1(arr1, k);
	printf("%s\n", arr1);
	LeftMove2(arr2, k);  //三步翻转法
	printf("%s\n", arr2);
	return 0;
}

  • 作者:珲瑺の忒怷
  • 原文链接:https://blog.csdn.net/qq_66923215/article/details/126129247
    更新时间:2023年6月12日13:09:36 ,共 711 字。