字符串的旋转

一、字符串逆转
1.思想:
首先定义一个逆转字符串函数reverse(char *left, char *right)
输入你想要旋转的字符个数,
然后将要旋转的字符通过reverse()逆转
再将不需要旋转的字符串通过reverse()逆转
最后将整个字符串进行逆转实现所需功能
2.实例:
字符串为 ABCDEF 逆转字符串个数为2
(1) 将AB逆转为BA
(2) 将CDEF逆转为FEDC
(3) 将BAFEDC逆转为CDEFAB
3.代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include

void reverse(char *left, char *right)
{

char temp;
assert(left);
assert(right);
while (right > left)
{
	temp = *left;
	*left = *right;
	*right = temp;
	left++;
	right--;
}

}
void left_move(char *str, int k)
{

int len = strlen(str);
assert(str);
assert(k > 0);               
reverse(str, str + k - 1);   //先将要左移的部分逆置
reverse(str + k, str + len - 1); //再将不需要左移的部分逆置
reverse(str, str + len - 1); //最后将全部部分逆置

}

int main()
{

int num = 0;
char arr[] = { 0 };
printf("请输入你想要的字符串,但不能超过%d\n", size);
scanf("%s", arr);
printf("请输入要逆转的个数\n");
scanf("%d", &num);
/*left_move(arr, num);*/
left_move(arr, num);
printf("%s\n", arr);
system("pause");
return 0;

}
二、判断一个字符串逆转后是否与另一个字符串相等
1.思想
通过第一部分的代码实现字符串的逆转,再将逆转后的字符串通过strcmp()函数进行判断
2.实例
字符串1:ABCDEF
字符串2:BCDEFA
字符串2将首元素逆转后与字符串1相等
3.代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
void reverse(char *left, char *right)
{

char temp;
assert(left);
assert(right);
while (right > left)
{
	temp = *left;
	*left = *right;
	*right = temp;
	left++;
	right--;
}

}
void left_move(char *str, int k) //字符串的逆转
{

int len = strlen(str);
assert(str);
assert(k > 0);
reverse(str, str + k - 1);   //先将要左移的部分逆置
reverse(str + k, str + len - 1); //再将不需要左移的部分逆置
reverse(str, str + len - 1); //最后将全部部分逆置

}
int is_left_move(char *arr, const char *p)
{

int i = 0;
char *arr1 = arr;
int len = strlen(arr);
assert(arr != NULL);
assert(p != NULL);

for (i = 1; i < len; i++)
{
	left_move(arr1,1);
	if (!strcmp(arr1, p))
	{
		return 1;
	}
}
return 0;

}
int main()
{

char arr1[] = { 0 };
char arr2[] = { 0 };
int ret = 0;
printf("请输入字符串1=>\n");
scanf("%s", arr1);
printf("请输入字符串2=>\n");
scanf("%s", arr2);
ret = is_left_move(arr1, arr2);
switch (ret)
{
case 1 :
	printf("两个字符串互逆\n");
	break;
case 0:
	printf("两个字符串不互逆\n");
	break;
default:
	printf("两个字符串没有关系\n");
	break;
}
system("pause");
return 0;

}

你可能感兴趣的:(字符串的旋转)