//判断一个字符窜是否为另外一个字符串旋转之后的字符串
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1 = abcd和s2 = ACBD,返回0.
// AABCD左旋一个字符得到ABCDA
// AABCD左旋两个字符得到BCDAA
// AABCD右旋一个字符得到DAABC
解题思路:
1> 首先需要一个旋转字符串的函数、判断字符串是否相等的函数和交换字符的
函数;
2> 实现旋转:根据你要旋转字符的个数循环几次,再通过循环交换字符的顺序;
3> 实现判断:判断两个字符串是否相等需要判断每个字符是否相等,若有一个
不相等,返回0,否则返回1;
4> 代码完成,输出返回值。
源代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
//例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1 = abcd和s2 = ACBD,返回0.
//
//AABCD左旋一个字符得到ABCDA
//AABCD左旋两个字符得到BCDAA
//
//AABCD右旋一个字符得到DAABC
//交换字符串中的字符
void Swap(char* x, char* y)
{
char tmp =*x;
*x = *y;
*y = tmp;
}
//旋转字符串中的字符
char* LeftMove(char arr1[])
{
int num = 0;
int len = strlen(arr1);
printf("请输入你想要左旋的个数:");
scanf("%d", &num);
for (int i = 0; i < num; i++)
{
for (int j = 0; j < len - 1; j++)
{
//交换字符串的首字符和第二个字符,依次交换后面的
Swap(&arr1[j], &arr1[j + 1]);
}
}
return arr1;
}
//判断两个字符串是否相等
int Exchange(char* arr1, char* arr2)
{
int i = 0;
int len = strlen(arr1);
for (i = 0; i < len; i++)
{
if (arr1[i] != arr2[i])
{
return 0;
}
}
return 1;
}
int main()
{
char arr1[] = { "AABCD" };
char arr2[] = { "BCDAA" };
int len = strlen(arr1);
//旋转字符串
LeftMove(arr1);
//比较字符串是否相等
printf("%d\n", Exchange(arr1, arr2));
system("pause");
return 0;
}
运行结果:
不等: 相等: